TPTP Axioms File: MAT001^0.ax


%------------------------------------------------------------------------------
% File     : MAT001^0 : TPTP v7.5.0. Released v7.0.0.
% Domain   : Various mathematical domains
% Axioms   : Untyped lambda sigma calculus
% Version  : [Mat16] axioms : Especial.
% English  :

% Refs     : [Mat16] Matsuzaki (2016), Email to Geoff Sutcliffe
%          : [MI+16] Matsuzaki et al. (2016), Race against the Teens - Benc
% Source   : [Mat16]
% Names    :

% Status   : Satisfiable
% Syntax   : Number of formulae    : 3484 (   0 unit;1199 type;   0 defn)
%            Number of atoms       : 45294 (2208 equality;22699 variable)
%            Maximal formula depth :   35 (   9 average)
%            Number of connectives : 39592 ( 104   ~; 233   |;1172   &;35957   @)
%                                         (1095 <=>;1031  =>;   0  <=;   0 <~>)
%                                         (   0  ~|;   0  ~&)
%            Number of type conns  : 2408 (2408   >;   0   *;   0   +;   0  <<)
%            Number of symbols     : 1246 (1199   :;   0   =;   0  @=)
%                                         (   0  !!;   0  ??;   0 @@+;   0 @@-)
%            Number of variables   : 8055 (  66 sgn;7085   !; 429   ?; 405   ^)
%                                         (8055   :; 136  !>;   0  ?*)
%                                         (   0  @-;   0  @+)
%            Arithmetic symbols    : 1974 (   6 prd;   9 fun;  23 num;1936 var)
% SPC      : TH1_SAT_EQU_ARI

% Comments :
%------------------------------------------------------------------------------
%----Basic types
%------------------------------------------------------------------------------
%----Character strings
thf('String_type',type,(
    'String': $tType )).

%----Repeated application of a function
%----repeat(0, F, X) = X
%----repeat(1, F, X) = F(X)
%----repeat(2, F, X) = F(F(X))
%----and so on
thf('repeat/3_type',type,(
    'repeat/3': 
      !>[Tv0: $tType] :
        ( $int > ( Tv0 > Tv0 ) > Tv0 > Tv0 ) )).

%----repeat-p(0, F, X) = X
%----repeat-p(1, F, X) = F(X, 0)
%----repeat-p(2, F, X) = F(F(X, 0), 1)
%----repeat-p(3, F, X) = F(F(F(X, 0), 1), 2)
%----and so on
thf('repeat-p/3_type',type,(
    'repeat-p/3': 
      !>[Tv0: $tType] :
        ( $int > ( Tv0 > $int > Tv0 ) > Tv0 > Tv0 ) )).

%----Unit type: a special type that only includes a single constant '(_)'
thf('Unit_type',type,(
    'Unit': $tType )).

%----The singleton member of the Unit type
thf('_/0_type',type,(
    '_/0': 'Unit' )).

%----Variable type: to represent first order terms in the logic
thf('Var_type',type,(
    'Var': $tType )).

%----var("x") = variable with name 'x'
thf('var/1_type',type,(
    'var/1': 'String' > 'Var' )).

%----Trivially true for any Var
thf('is-var/1_type',type,(
    'is-var/1': 'Var' > $o )).

%------------------------------------------------------------------------------
%----Constants
%------------------------------------------------------------------------------
%----Pi
thf('Pi/0_type',type,(
    'Pi/0': $real )).

%----The base of the natural logarithm
thf('Napier/0_type',type,(
    'Napier/0': $real )).

%----x * Degree() = (x * Pi/180) radian
thf('Degree/0_type',type,(
    'Degree/0': $real )).

%----A special constant that represents undefined value
thf('undefined/0_type',type,(
    'undefined/0': 
      !>[Tv0: $tType] : Tv0 )).

%------------------------------------------------------------------------------
%----List operations
%------------------------------------------------------------------------------
%----Polymorphic list of elements of type a
thf('ListOf_type',type,(
    'ListOf': $tType > $tType )).

%----List constructor
thf('cons/2_type',type,(
    'cons/2': 
      !>[Tv0: $tType] :
        ( Tv0 > ( 'ListOf' @ Tv0 ) > ( 'ListOf' @ Tv0 ) ) )).

%----List terminator
thf('nil/0_type',type,(
    'nil/0': 
      !>[Tv0: $tType] :
        ( 'ListOf' @ Tv0 ) )).

%----First element of a list
thf('car/1_type',type,(
    'car/1': 
      !>[Tv0: $tType] :
        ( ( 'ListOf' @ Tv0 ) > Tv0 ) )).

%----Second element of a list
thf('cadr/1_type',type,(
    'cadr/1': 
      !>[Tv0: $tType] :
        ( ( 'ListOf' @ Tv0 ) > Tv0 ) )).

%----Third element of a list
thf('caddr/1_type',type,(
    'caddr/1': 
      !>[Tv0: $tType] :
        ( ( 'ListOf' @ Tv0 ) > Tv0 ) )).

%----Fourth element of a list
thf('cadddr/1_type',type,(
    'cadddr/1': 
      !>[Tv0: $tType] :
        ( ( 'ListOf' @ Tv0 ) > Tv0 ) )).

%----Tail of a list: cdr(cons(x, xs)) = xs
thf('cdr/1_type',type,(
    'cdr/1': 
      !>[Tv0: $tType] :
        ( ( 'ListOf' @ Tv0 ) > ( 'ListOf' @ Tv0 ) ) )).

%----last(xs) = last element of list xs
thf('last/1_type',type,(
    'last/1': 
      !>[Tv0: $tType] :
        ( ( 'ListOf' @ Tv0 ) > Tv0 ) )).

%----First (n-1) elements of a list of length n
thf('butlast/1_type',type,(
    'butlast/1': 
      !>[Tv0: $tType] :
        ( ( 'ListOf' @ Tv0 ) > ( 'ListOf' @ Tv0 ) ) )).

%----replicate(n, a) = list [a, a, ..., a] of length n
thf('replicate/2_type',type,(
    'replicate/2': 
      !>[Tv0: $tType] :
        ( $int > Tv0 > ( 'ListOf' @ Tv0 ) ) )).

%----nthcdr(n, xs) = all but the first n elements of list xs
thf('nthcdr/2_type',type,(
    'nthcdr/2': 
      !>[Tv0: $tType] :
        ( $int > ( 'ListOf' @ Tv0 ) > ( 'ListOf' @ Tv0 ) ) )).

%----nth(n, xs) = n-th element of list xs
thf('nth/2_type',type,(
    'nth/2': 
      !>[Tv0: $tType] :
        ( $int > ( 'ListOf' @ Tv0 ) > Tv0 ) )).

%----equal(xs) <-> all the elements in xs are identical
thf('equal/1_type',type,(
    'equal/1': 
      !>[Tv0: $tType] :
        ( ( 'ListOf' @ Tv0 ) > $o ) )).

%----member(x, xs) <-> x is a member of list xs
thf('member/2_type',type,(
    'member/2': 
      !>[Tv0: $tType] :
        ( Tv0 > ( 'ListOf' @ Tv0 ) > $o ) )).

%----is-prefix-of(xs, ys) <-> list xs is a prefix of list ys
thf('is-prefix-of/2_type',type,(
    'is-prefix-of/2': 
      !>[Tv0: $tType] :
        ( ( 'ListOf' @ Tv0 ) > ( 'ListOf' @ Tv0 ) > $o ) )).

%----is-infix-of(xs, ys) <-> list xs is a consecutive subsequence of list ys
thf('is-infix-of/2_type',type,(
    'is-infix-of/2': 
      !>[Tv0: $tType] :
        ( ( 'ListOf' @ Tv0 ) > ( 'ListOf' @ Tv0 ) > $o ) )).

%----map(f(*), [a1,...,an]) = the list [f(a1),...,f(an)]
thf('map/2_type',type,(
    'map/2': 
      !>[Tv0: $tType,Tv1: $tType] :
        ( ( Tv0 > Tv1 ) > ( 'ListOf' @ Tv0 ) > ( 'ListOf' @ Tv1 ) ) )).

%----foldr(f(*,*), b, [a1,...,an]) = f(an, f(an-1, ...f(a1,b)...))
thf('foldr/3_type',type,(
    'foldr/3': 
      !>[Tv0: $tType,Tv1: $tType] :
        ( ( Tv0 > Tv1 > Tv1 ) > Tv1 > ( 'ListOf' @ Tv0 ) > Tv1 ) )).

%----foldr1(f(*,*), [a1,...,an]) = f(an, f(an-1, ...f(a2,a1)...))
thf('foldr1/2_type',type,(
    'foldr1/2': 
      !>[Tv0: $tType] :
        ( ( Tv0 > Tv0 > Tv0 ) > ( 'ListOf' @ Tv0 ) > Tv0 ) )).

%----all(P(*), [a1,...an]) <-> the conjunction P(a1) and ... and P(an) holds
thf('all/2_type',type,(
    'all/2': 
      !>[Tv0: $tType] :
        ( ( Tv0 > $o ) > ( 'ListOf' @ Tv0 ) > $o ) )).

%----all2(P(*,*), [a1,...an], [b1,...,bn]) <-> the conjunction P(a1,b1) and ... and P(an,bn) holds
%----evaluated to false if the argument lists have different length
thf('all2/3_type',type,(
    'all2/3': 
      !>[Tv0: $tType,Tv1: $tType] :
        ( ( Tv1 > Tv0 > $o ) > ( 'ListOf' @ Tv1 ) > ( 'ListOf' @ Tv0 ) > $o ) )).

%----combinatorial-all(P(*,*), [a1,...an]) <-> the conjunction of P(ai,aj) for i<j holds
thf('combinatorial-all/2_type',type,(
    'combinatorial-all/2': 
      !>[Tv0: $tType] :
        ( ( Tv0 > Tv0 > $o ) > ( 'ListOf' @ Tv0 ) > $o ) )).

%----combinatorial-some(P(*,*), [a1,...an]) <-> the disjunction of P(ai,aj) for i<j holds
thf('combinatorial-some/2_type',type,(
    'combinatorial-some/2': 
      !>[Tv0: $tType] :
        ( ( Tv0 > Tv0 > $o ) > ( 'ListOf' @ Tv0 ) > $o ) )).

%----cyclic-all(P(*,*,*), [a1,...,an]) <-> the conjunction P(an,a1,a2) and ... and P(an-1,an,a1) holds
thf('cyclic-all/2_type',type,(
    'cyclic-all/2': 
      !>[Tv0: $tType] :
        ( ( Tv0 > Tv0 > Tv0 > $o ) > ( 'ListOf' @ Tv0 ) > $o ) )).

%----cyclic-some(P(*,*,*), [a1,...,an]) <-> the disjunction P(an,a1,a2) or ... or P(an-1,an,a1) holds
thf('cyclic-some/2_type',type,(
    'cyclic-some/2': 
      !>[Tv0: $tType] :
        ( ( Tv0 > Tv0 > Tv0 > $o ) > ( 'ListOf' @ Tv0 ) > $o ) )).

%----some(P(*), [a1,...an]) <-> the disjunction P(a1) or ... or P(an) holds
thf('some/2_type',type,(
    'some/2': 
      !>[Tv0: $tType] :
        ( ( Tv0 > $o ) > ( 'ListOf' @ Tv0 ) > $o ) )).

%----pairwise-distinct(list) <-> the members of list are pairwise-distinct
thf('pairwise-distinct/1_type',type,(
    'pairwise-distinct/1': 
      !>[Tv0: $tType] :
        ( ( 'ListOf' @ Tv0 ) > $o ) )).

%----filter(P(*), [a1,...,an]) = the list of ai's such that P(ai) hold
%----preserves the original order of the input list
thf('filter/2_type',type,(
    'filter/2': 
      !>[Tv0: $tType] :
        ( ( Tv0 > $o ) > ( 'ListOf' @ Tv0 ) > ( 'ListOf' @ Tv0 ) ) )).

%----remove-repetition([a1,...,an]) = the list of ai's of which occurrences after the first are ommited
%----preserves the original order of the input list
thf('remove-repetition/1_type',type,(
    'remove-repetition/1': 
      !>[Tv0: $tType] :
        ( ( 'ListOf' @ Tv0 ) > ( 'ListOf' @ Tv0 ) ) )).

%----list-len([a1,...,an]) = n
thf('list-len/1_type',type,(
    'list-len/1': 
      !>[Tv0: $tType] :
        ( ( 'ListOf' @ Tv0 ) > $int ) )).

%----zip-with(f(*,*), [a1,...,an], [b1,...,bn]) = [f(a1,b1), ..., f(an,bn)]
%----ignore the rest members if the argument lists have different length
thf('zip-with/3_type',type,(
    'zip-with/3': 
      !>[Tv0: $tType,Tv1: $tType,Tv2: $tType] :
        ( ( Tv1 > Tv0 > Tv2 ) > ( 'ListOf' @ Tv1 ) > ( 'ListOf' @ Tv0 ) > ( 'ListOf' @ Tv2 ) ) )).

%----append([a1,...an], [b1,...,bm]) = the list [a1,...,an,b1,...,bm]
thf('append/2_type',type,(
    'append/2': 
      !>[Tv0: $tType] :
        ( ( 'ListOf' @ Tv0 ) > ( 'ListOf' @ Tv0 ) > ( 'ListOf' @ Tv0 ) ) )).

%----delete(a, lis) = the list which is constructed by omitting the first 
%----occurrence of a from list preserves the original order of the input list
thf('delete/2_type',type,(
    'delete/2': 
      !>[Tv0: $tType] :
        ( Tv0 > ( 'ListOf' @ Tv0 ) > ( 'ListOf' @ Tv0 ) ) )).

%----remove(a, lis) = the list which is constructed by omitting all occurrences 
%----of a from list preserves the original order of the input list
thf('remove/2_type',type,(
    'remove/2': 
      !>[Tv0: $tType] :
        ( Tv0 > ( 'ListOf' @ Tv0 ) > ( 'ListOf' @ Tv0 ) ) )).

%----remove([a1,...,an], lis) = the list which is constructed by omitting all 
%----occurrences of ai's from lis preserves the original order of the input list
thf('remove-list/2_type',type,(
    'remove-list/2': 
      !>[Tv0: $tType] :
        ( ( 'ListOf' @ Tv0 ) > ( 'ListOf' @ Tv0 ) > ( 'ListOf' @ Tv0 ) ) )).

%----list-number(a, lis) = the number of occurrences of a in lis
thf('list-number/2_type',type,(
    'list-number/2': 
      !>[Tv0: $tType] :
        ( Tv0 > ( 'ListOf' @ Tv0 ) > $int ) )).

%----conj1(P(*),Q(*)) = (P&&Q)(*)
thf('conj1/2_type',type,(
    'conj1/2': 
      !>[Tv0: $tType] :
        ( ( Tv0 > $o ) > ( Tv0 > $o ) > Tv0 > $o ) )).

%----conj1(P(*,*),Q(*,*)) = (P&&Q)(*,*)
thf('conj2/2_type',type,(
    'conj2/2': 
      !>[Tv0: $tType,Tv1: $tType] :
        ( ( Tv0 > Tv1 > $o ) > ( Tv0 > Tv1 > $o ) > Tv0 > Tv1 > $o ) )).

%----is-a-permutation-of(list1,list2) <-> all members of list1 and list2 are 
%----the same
thf('is-a-permutation-of/2_type',type,(
    'is-a-permutation-of/2': 
      !>[Tv0: $tType] :
        ( ( 'ListOf' @ Tv0 ) > ( 'ListOf' @ Tv0 ) > $o ) )).

%----is-subset-list-of(list1,list2) <-> all members of list1 are also the 
%----members of list2
thf('is-subset-list-of/2_type',type,(
    'is-subset-list-of/2': 
      !>[Tv0: $tType] :
        ( ( 'ListOf' @ Tv0 ) > ( 'ListOf' @ Tv0 ) > $o ) )).

%----is-increasing-list([r1,...,rn]) <-> ri<=ri+1 for all 1<=i<n
thf('is-increasing-list/1_type',type,(
    'is-increasing-list/1': ( 'ListOf' @ $real ) > $o )).

%----is-increasing-list([r1,...,rn]) <-> ri>=ri+1 for all 1<=i<n
thf('is-decreasing-list/1_type',type,(
    'is-decreasing-list/1': ( 'ListOf' @ $real ) > $o )).

%----list definition by example
thf('list-from-to/2_type',type,(
    'list-from-to/2': 
      !>[Tv0: $tType] :
        ( ( 'ListOf' @ Tv0 ) > ( 'ListOf' @ Tv0 ) > ( 'ListOf' @ Tv0 ) ) )).

%------------------------------------------------------------------------------
%----Other higher-order functions
%------------------------------------------------------------------------------
thf('compose/2_type',type,(
    'compose/2': 
      !>[Tv0: $tType,Tv1: $tType,Tv2: $tType] :
        ( ( Tv2 > Tv0 ) > ( Tv0 > Tv1 ) > Tv2 > Tv1 ) )).

%-------------------------------------------------------------------------------
%----Tuples
%-------------------------------------------------------------------------------
%----Polymorphic pair of type a and type b
thf('Pair_type',type,(
    'Pair': $tType > $tType > $tType )).

%----Polymorphic triple of type a, type b and type c
thf('Triple_type',type,(
    'Triple': $tType > $tType > $tType > $tType )).

%----Polymorphic tuple of length 4 of type a, type b, type c and type d
thf('Tuple4_type',type,(
    'Tuple4': $tType > $tType > $tType > $tType > $tType )).

%----Pair constructor
thf('pair/2_type',type,(
    'pair/2': 
      !>[Tv0: $tType,Tv1: $tType] :
        ( Tv1 > Tv0 > ( 'Pair' @ Tv1 @ Tv0 ) ) )).

%----Triple constructor
thf('triple/3_type',type,(
    'triple/3': 
      !>[Tv0: $tType,Tv1: $tType,Tv2: $tType] :
        ( Tv2 > Tv1 > Tv0 > ( 'Triple' @ Tv2 @ Tv1 @ Tv0 ) ) )).

%----Tuple of length 4 constructor
thf('tuple4/4_type',type,(
    'tuple4/4': 
      !>[Tv0: $tType,Tv1: $tType,Tv2: $tType,Tv3: $tType] :
        ( Tv3 > Tv2 > Tv1 > Tv0 > ( 'Tuple4' @ Tv3 @ Tv2 @ Tv1 @ Tv0 ) ) )).

%----Trivially true for any Pair
thf('is-pair/1_type',type,(
    'is-pair/1': 
      !>[Tv0: $tType,Tv1: $tType] :
        ( ( 'Pair' @ Tv1 @ Tv0 ) > $o ) )).

%----Trivially true for any Triple
thf('is-triple/1_type',type,(
    'is-triple/1': 
      !>[Tv0: $tType,Tv1: $tType,Tv2: $tType] :
        ( ( 'Triple' @ Tv2 @ Tv1 @ Tv0 ) > $o ) )).

%----Trivially true for any Tuple4
thf('is-tuple4/1_type',type,(
    'is-tuple4/1': 
      !>[Tv0: $tType,Tv1: $tType,Tv2: $tType,Tv3: $tType] :
        ( ( 'Tuple4' @ Tv3 @ Tv2 @ Tv1 @ Tv0 ) > $o ) )).

%----fst(pair) = first entry of pair
thf('fst/1_type',type,(
    'fst/1': 
      !>[Tv0: $tType,Tv1: $tType] :
        ( ( 'Pair' @ Tv1 @ Tv0 ) > Tv1 ) )).

%----snd(pair) = second entry of pair
thf('snd/1_type',type,(
    'snd/1': 
      !>[Tv0: $tType,Tv1: $tType] :
        ( ( 'Pair' @ Tv1 @ Tv0 ) > Tv0 ) )).

%----fst-of-3(triple) = first entry of triple
thf('fst-of-3/1_type',type,(
    'fst-of-3/1': 
      !>[Tv0: $tType,Tv1: $tType,Tv2: $tType] :
        ( ( 'Triple' @ Tv2 @ Tv1 @ Tv0 ) > Tv2 ) )).

%----snd-of-3(triple) = second entry of triple
thf('snd-of-3/1_type',type,(
    'snd-of-3/1': 
      !>[Tv0: $tType,Tv1: $tType,Tv2: $tType] :
        ( ( 'Triple' @ Tv2 @ Tv1 @ Tv0 ) > Tv1 ) )).

%----third-of-3(triple) = third entry of triple
thf('third-of-3/1_type',type,(
    'third-of-3/1': 
      !>[Tv0: $tType,Tv1: $tType,Tv2: $tType] :
        ( ( 'Triple' @ Tv2 @ Tv1 @ Tv0 ) > Tv0 ) )).

%----fst-of-4(tuple4) = first entry of tuple4
thf('fst-of-4/1_type',type,(
    'fst-of-4/1': 
      !>[Tv0: $tType,Tv1: $tType,Tv2: $tType,Tv3: $tType] :
        ( ( 'Tuple4' @ Tv3 @ Tv2 @ Tv1 @ Tv0 ) > Tv3 ) )).

%----snd-of-4(tuple4) = second entry of tuple4
thf('snd-of-4/1_type',type,(
    'snd-of-4/1': 
      !>[Tv0: $tType,Tv1: $tType,Tv2: $tType,Tv3: $tType] :
        ( ( 'Tuple4' @ Tv3 @ Tv2 @ Tv1 @ Tv0 ) > Tv2 ) )).

%----third-of-4(tuple4) = third entry of tuple4
thf('third-of-4/1_type',type,(
    'third-of-4/1': 
      !>[Tv0: $tType,Tv1: $tType,Tv2: $tType,Tv3: $tType] :
        ( ( 'Tuple4' @ Tv3 @ Tv2 @ Tv1 @ Tv0 ) > Tv1 ) )).

%----forth-of-4(tuple4) = forth entry of tuple4
thf('fourth-of-4/1_type',type,(
    'fourth-of-4/1': 
      !>[Tv0: $tType,Tv1: $tType,Tv2: $tType,Tv3: $tType] :
        ( ( 'Tuple4' @ Tv3 @ Tv2 @ Tv1 @ Tv0 ) > Tv0 ) )).

%----zip([a1,...,an],[b1,...,bn]) = [pair(a1,b1), ..., pair(an,bn)]
%----ignore the rest members if the argument lists have different length
thf('zip/2_type',type,(
    'zip/2': 
      !>[Tv0: $tType,Tv1: $tType] :
        ( ( 'ListOf' @ Tv1 ) > ( 'ListOf' @ Tv0 ) > ( 'ListOf' @ ( 'Pair' @ Tv1 @ Tv0 ) ) ) )).

%----uncurry(f(a,b)) = f(pair(a,b))
thf('uncurry/1_type',type,(
    'uncurry/1': 
      !>[Tv0: $tType,Tv1: $tType,Tv2: $tType] :
        ( ( Tv0 > Tv1 > Tv2 ) > ( 'Pair' @ Tv0 @ Tv1 ) > Tv2 ) )).

%----p-uncurry(P(a,b)) = P(pair(a,b))
thf('p-uncurry/1_type',type,(
    'p-uncurry/1': 
      !>[Tv0: $tType,Tv1: $tType] :
        ( ( Tv0 > Tv1 > $o ) > ( 'Pair' @ Tv0 @ Tv1 ) > $o ) )).

%----all-pairs([a1,...,an]) = the list [pair(a1,a2),...,pair(a1,an), 
%----pair(a2,a3),...,pair(a2,an), ... , pair(an-1,an)]
thf('all-pairs/1_type',type,(
    'all-pairs/1': 
      !>[Tv0: $tType] :
        ( ( 'ListOf' @ Tv0 ) > ( 'ListOf' @ ( 'Pair' @ Tv0 @ Tv0 ) ) ) )).

%-------------------------------------------------------------------------------
%----Set & set operations
%-------------------------------------------------------------------------------
%----Polymorphic set of type a
thf('SetOf_type',type,(
    'SetOf': $tType > $tType )).

%----set-by-def(P(*)) = set of all a's that satisfy P(a)
thf('set-by-def/1_type',type,(
    'set-by-def/1': 
      !>[Tv0: $tType] :
        ( ( Tv0 > $o ) > ( 'SetOf' @ Tv0 ) ) )).

%----finset(listofelems) = finite set of elements in listofelems
thf('finset/1_type',type,(
    'finset/1': 
      !>[Tv0: $tType] :
        ( ( 'ListOf' @ Tv0 ) > ( 'SetOf' @ Tv0 ) ) )).

%----elem(a, set) <-> a is an element of set
thf('elem/2_type',type,(
    'elem/2': 
      !>[Tv0: $tType] :
        ( Tv0 > ( 'SetOf' @ Tv0 ) > $o ) )).

%----image(fun, set) <-> image of set by fun
thf('image/2_type',type,(
    'image/2': 
      !>[Tv0: $tType,Tv1: $tType] :
        ( ( Tv0 > Tv1 ) > ( 'SetOf' @ Tv0 ) > ( 'SetOf' @ Tv1 ) ) )).

%----Trivially true for any SetOf a
thf('is-set/1_type',type,(
    'is-set/1': 
      !>[Tv0: $tType] :
        ( ( 'SetOf' @ Tv0 ) > $o ) )).

%----is-empty(set) <-> set is an empty set
thf('is-empty/1_type',type,(
    'is-empty/1': 
      !>[Tv0: $tType] :
        ( ( 'SetOf' @ Tv0 ) > $o ) )).

%----is-singleton(set) <-> set contains exactly one element
thf('is-singleton/1_type',type,(
    'is-singleton/1': 
      !>[Tv0: $tType] :
        ( ( 'SetOf' @ Tv0 ) > $o ) )).

%----is-subset-of(set1, set2) <-> set1 is a subset of set2
thf('is-subset-of/2_type',type,(
    'is-subset-of/2': 
      !>[Tv0: $tType] :
        ( ( 'SetOf' @ Tv0 ) > ( 'SetOf' @ Tv0 ) > $o ) )).

%----pairwise-disjoint(setofsets) <-> two elements of setofsets are disjoint
thf('pairwise-disjoint/1_type',type,(
    'pairwise-disjoint/1': 
      !>[Tv0: $tType] :
        ( ( 'SetOf' @ Tv0 ) > $o ) )).

%----comlement-of-in(set1, set2) = the set difference of set2 minus set1
thf('complement-of-in/2_type',type,(
    'complement-of-in/2': 
      !>[Tv0: $tType] :
        ( ( 'SetOf' @ Tv0 ) > ( 'SetOf' @ Tv0 ) > ( 'SetOf' @ Tv0 ) ) )).

%----set-union(set1, set2) = the union of set1 and set2
thf('set-union/2_type',type,(
    'set-union/2': 
      !>[Tv0: $tType] :
        ( ( 'SetOf' @ Tv0 ) > ( 'SetOf' @ Tv0 ) > ( 'SetOf' @ Tv0 ) ) )).

%----set-union(listofsets) = the union of all members in listofsets
thf('set-union/1_type',type,(
    'set-union/1': 
      !>[Tv0: $tType] :
        ( ( 'ListOf' @ ( 'SetOf' @ Tv0 ) ) > ( 'SetOf' @ Tv0 ) ) )).

%----set-intersection(set1, set2) = the intersection of set1 and set2
thf('set-intersection/2_type',type,(
    'set-intersection/2': 
      !>[Tv0: $tType] :
        ( ( 'SetOf' @ Tv0 ) > ( 'SetOf' @ Tv0 ) > ( 'SetOf' @ Tv0 ) ) )).

%----set-intersection(listofsets) = intersection of all members in listofsets
thf('set-intersection/1_type',type,(
    'set-intersection/1': 
      !>[Tv0: $tType] :
        ( ( 'ListOf' @ ( 'SetOf' @ Tv0 ) ) > ( 'SetOf' @ Tv0 ) ) )).

thf('is-cardinality-of/2_type',type,(
    'is-cardinality-of/2': 
      !>[Tv0: $tType] :
        ( $int > ( 'SetOf' @ Tv0 ) > $o ) )).

%----cardinality-of(set) = the number of elements in set
%----works correctly only for finite sets
thf('cardinality-of/1_type',type,(
    'cardinality-of/1': 
      !>[Tv0: $tType] :
        ( ( 'SetOf' @ Tv0 ) > $int ) )).

%----is-list-subset-of(list, set) <-> all members in list are an element of set
thf('is-list-subset-of/2_type',type,(
    'is-list-subset-of/2': 
      !>[Tv0: $tType] :
        ( ( 'ListOf' @ Tv0 ) > ( 'SetOf' @ Tv0 ) > $o ) )).

%-------------------------------------------------------------------------------
%----if/cond/pcond
%-------------------------------------------------------------------------------
%----if(cond, a, b) = a if cond holds, and b otherwise
thf('if/3_type',type,(
    'if/3': 
      !>[Tv0: $tType] :
        ( ( 'Unit' > $o ) > Tv0 > Tv0 > Tv0 ) )).

%----trivially true for any SetOf a
thf('is-range/1_type',type,(
    'is-range/1': 
      !>[Tv0: $tType] :
        ( ( 'SetOf' @ Tv0 ) > $o ) )).

%-------------------------------------------------------------------------------
%----Real arithmetic
%-------------------------------------------------------------------------------
%----a ^ b = the power of a to b in real numbers, effective only when a >= 0
thf('^/2_type',type,(
    '^/2': $real > $real > $real )).

%----sqrt(a) = the positive square root of a, effective only when a >= 0
thf('sqrt/1_type',type,(
    'sqrt/1': $real > $real )).

%----abs(a) = the absolute value of a
thf('abs/1_type',type,(
    'abs/1': $real > $real )).

%----sign(a) = the sign of a
%----0 if a is 0
thf('sign/1_type',type,(
    'sign/1': $real > $real )).

%----mean(a,b) = the arithmetic mean of a and b
thf('mean/2_type',type,(
    'mean/2': $real > $real > $real )).

%----geom-mean(a,b) = the geometric mean of a and b
thf('geom-mean/2_type',type,(
    'geom-mean/2': $real > $real > $real )).

%----min(a,b) = a if a<=b holds, and b otherwise
thf('min/2_type',type,(
    'min/2': $real > $real > $real )).

%----max(a,b) = b if a<=b holds, and a otherwise
thf('max/2_type',type,(
    'max/2': $real > $real > $real )).

%----is-abs-of(x, a) <-> x is the absolute value of a
thf('is-abs-of/2_type',type,(
    'is-abs-of/2': $real > $real > $o )).

%----are-triangle-edges(x,y,z) <-> x, y, z satisfy the triangle inequality
thf('are-triangle-edges/3_type',type,(
    'are-triangle-edges/3': $real > $real > $real > $o )).

%-------------------------------------------------------------------------------
%----Trigonometric functions
%-------------------------------------------------------------------------------
%----sin(a) = the sine of a
thf('sin/1_type',type,(
    'sin/1': $real > $real )).

%----cos(a) = the cosine of a
thf('cos/1_type',type,(
    'cos/1': $real > $real )).

%----tan(a) = the tangent of a
thf('tan/1_type',type,(
    'tan/1': $real > $real )).

%----csc(a) = the cosecant of a
thf('csc/1_type',type,(
    'csc/1': $real > $real )).

%----sec(a) = the secant of a
thf('sec/1_type',type,(
    'sec/1': $real > $real )).

%----cot(a) = the cotangent of a
thf('cot/1_type',type,(
    'cot/1': $real > $real )).

%----arccsc(a) = the arccosecant of a
thf('arccsc/1_type',type,(
    'arccsc/1': $real > $real )).

%----arc(a) = the arcsecant of a
thf('arcsec/1_type',type,(
    'arcsec/1': $real > $real )).

%----arccot(a) = the arccotangent of a
thf('arccot/1_type',type,(
    'arccot/1': $real > $real )).

%----atctan(a) = the arctangent of a
thf('arctan/1_type',type,(
    'arctan/1': $real > $real )).

%----cosh(a) = the hyperbolic cosine of a
thf('cosh/1_type',type,(
    'cosh/1': $real > $real )).

%----sinh(a) = the hyperbolic sine of a
thf('sinh/1_type',type,(
    'sinh/1': $real > $real )).

%----tanh(a) = the hyperbolic tangent of a
thf('tanh/1_type',type,(
    'tanh/1': $real > $real )).

%----arccosh(a) = the archyperbolic cosine of a
thf('arccosh/1_type',type,(
    'arccosh/1': $real > $real )).

%----arcsinh(a) = the archyperbolic sine of a
thf('arcsinh/1_type',type,(
    'arcsinh/1': $real > $real )).

%----arctanh(a) = the archyperbolic tangent of a
thf('arctanh/1_type',type,(
    'arctanh/1': $real > $real )).

%-------------------------------------------------------------------------------
%----Exponential and logarithm
%-------------------------------------------------------------------------------
%----exp(a) = the exponential of a
thf('exp/1_type',type,(
    'exp/1': $real > $real )).

%----log(a, b) = the logarithm of a to the base of b
thf('log/2_type',type,(
    'log/2': $real > $real > $real )).

%----ln(a) = the natural logarithm of a
thf('ln/1_type',type,(
    'ln/1': $real > $real )).

%-------------------------------------------------------------------------------
%----Integrality
%-------------------------------------------------------------------------------
%----is-floor-of(n,a) = n is the maximum integer not greater than a
thf('is-floor-of/2_type',type,(
    'is-floor-of/2': $int > $real > $o )).

%----is-fractional-part-of(a) = the fractional part of a
thf('is-fractional-part-of/2_type',type,(
    'is-fractional-part-of/2': $real > $real > $o )).

%----is-someint(a) <-> a is an integer
thf('is-someint/1_type',type,(
    'is-someint/1': $real > $o )).

%----is-irrational(a) <-> a is an irrational number
thf('is-irrational/1_type',type,(
    'is-irrational/1': $real > $o )).

%----trivially true for any real number
thf('constant/1_type',type,(
    'constant/1': $real > $o )).

%----trivially true for any real number
thf('real-number/1_type',type,(
    'real-number/1': $real > $o )).

%----list-int->real([a1,...,an]) = the list [a1,...,an] of which members have the type R
thf('list-int->real/1_type',type,(
    'list-int->real/1': ( 'ListOf' @ $int ) > ( 'ListOf' @ $real ) )).

%-------------------------------------------------------------------------------
%----Operations on sets and lists of R
%-------------------------------------------------------------------------------
%----difference([a,b]) = the absolute value of a-b, not implemented for longer 
%----arrays
thf('difference/1_type',type,(
    'difference/1': ( 'ListOf' @ $real ) > $real )).

%----sum([a1,...,an]) = the sum of a1,...,an in real numbers
thf('sum/1_type',type,(
    'sum/1': ( 'ListOf' @ $real ) > $real )).

%----product([a1,...,an]) = the product of a1,...,an in real numbers
thf('product/1_type',type,(
    'product/1': ( 'ListOf' @ $real ) > $real )).

%----min(list) = the minimum member in list
thf('list-min/1_type',type,(
    'list-min/1': ( 'ListOf' @ $real ) > $real )).

%----max(list) = the maximum member in list
thf('list-max/1_type',type,(
    'list-max/1': ( 'ListOf' @ $real ) > $real )).

%----is-upper-bound-of(a, set) <-> a is an upper bound of set
thf('is-upper-bound-of/2_type',type,(
    'is-upper-bound-of/2': $real > ( 'SetOf' @ $real ) > $o )).

%----is-lower-bound-of(a, set) <-> a is a lower bound of set
thf('is-lower-bound-of/2_type',type,(
    'is-lower-bound-of/2': $real > ( 'SetOf' @ $real ) > $o )).

%----is-sup-of(a, set) <-> a is the supremum of set
thf('is-sup-of/2_type',type,(
    'is-sup-of/2': $real > ( 'SetOf' @ $real ) > $o )).

%----is-inf-of(a,set) <-> a is the infimum of set
thf('is-inf-of/2_type',type,(
    'is-inf-of/2': $real > ( 'SetOf' @ $real ) > $o )).

%-------------------------------------------------------------------------------
%----R -> R functions
%-------------------------------------------------------------------------------
%----Function from R to R
thf('R2R_type',type,(
    'R2R': $tType )).

%----fun(f) = function f of the type of R2R
thf('fun/1_type',type,(
    'fun/1': ( $real > $real ) > 'R2R' )).

%----Trivially true for any function of type R2R
thf('is-function/1_type',type,(
    'is-function/1': 'R2R' > $o )).

%----is-constant-func(f) <-> f is a constant function
thf('is-constant-func/1_type',type,(
    'is-constant-func/1': 'R2R' > $o )).

%----fun+(f,g) = the sum of f and g in the function space
thf('fun+/2_type',type,(
    'fun+/2': 'R2R' > 'R2R' > 'R2R' )).

%----fun-(f,g) = the difference of f and g in the function space
thf('fun-/2_type',type,(
    'fun-/2': 'R2R' > 'R2R' > 'R2R' )).

%----fun-s*(a,f) = the scalar product of a and f in the function space
thf('fun-s*/2_type',type,(
    'fun-s*/2': $real > 'R2R' > 'R2R' )).

%----fun*(f,g) = the product of f and g in the function space
thf('fun*/2_type',type,(
    'fun*/2': 'R2R' > 'R2R' > 'R2R' )).

%----fun-sum(listoffuns) = the sum of members in listoffuns in the function 
%----space
thf('fun-sum/1_type',type,(
    'fun-sum/1': ( 'ListOf' @ 'R2R' ) > 'R2R' )).

%----fun-product(listoffuns) = the product of members in listoffuns in the 
%----function space
thf('fun-product/1_type',type,(
    'fun-product/1': ( 'ListOf' @ 'R2R' ) > 'R2R' )).

%----fun-range(f) = the image of R by f
thf('fun-range/1_type',type,(
    'fun-range/1': 'R2R' > ( 'SetOf' @ $real ) )).

%----funapp(f,a) = the value of f evaluated at a
thf('funapp/2_type',type,(
    'funapp/2': 'R2R' > $real > $real )).

%----derivative(f) = derivative of function f
thf('derivative/1_type',type,(
    'derivative/1': 'R2R' > 'R2R' )).

%----integration(f,a,b) = the definite integral of f from a to b
thf('integration/3_type',type,(
    'integration/3': 'R2R' > $real > $real > $real )).

%----deriv(f) = derivative of function f
thf('deriv/1_type',type,(
    'deriv/1': ( $real > $real ) > $real > $real )).

%----integral(f,a,b) = the definite integral of f from a to b
thf('integral/3_type',type,(
    'integral/3': ( $real > $real ) > $real > $real > $real )).

%----func-even(f) <-> f is an even function
thf('func-even/1_type',type,(
    'func-even/1': 'R2R' > $o )).

%----func-odd(f) <-> f is an odd function
thf('func-odd/1_type',type,(
    'func-odd/1': 'R2R' > $o )).

%----is-fun-deg-of(n,f) <-> f is a univariate polynomial function and has 
%----degree n
%ZZZZZZZZZZZZZZZZZZZZZZ
thf('is-fun-deg-of/2_type',type,(
    'is-fun-deg-of/2': $int > 'R2R' > $o )).

%----fun-deg(f) = the polynomial degree of f
%----effective only if f is a polynomial function
thf('func-deg/1_type',type,(
    'func-deg/1': 'R2R' > $int )).

%----fun-coefficients-of(f) = the list of coefficients of in the ascending order of the degrees
%----effective only if f is a polynomial function
thf('func-coefficients-of/1_type',type,(
    'func-coefficients-of/1': 'R2R' > ( 'ListOf' @ $real ) )).

%----func-max(f,S,x,m) = m=f(x) is the maximum value of f in S
thf('func-max/4_type',type,(
    'func-max/4': 'R2R' > ( 'SetOf' @ $real ) > $real > $real > $o )).

%----func-min(f,S,x,m) = m=f(x) is the minimum value of f in S
thf('func-min/4_type',type,(
    'func-min/4': 'R2R' > ( 'SetOf' @ $real ) > $real > $real > $o )).

%----func-max(f,x,m) = m=f(x) is the maximum value of f in R
thf('func-max/3_type',type,(
    'func-max/3': 'R2R' > $real > $real > $o )).

%----func-min(f,x,m) = m=f(x) is the minimum value of f in R
thf('func-min/3_type',type,(
    'func-min/3': 'R2R' > $real > $real > $o )).

%----func-maximal(f,x,y) <-> f takes maximal value y at x
thf('func-maximal/3_type',type,(
    'func-maximal/3': 'R2R' > $real > $real > $o )).

%----func-minimal(f,x,y) <-> f takes minimal value y at x
thf('func-minimal/3_type',type,(
    'func-minimal/3': 'R2R' > $real > $real > $o )).

%----func-extreme(f,x,y) <-> f takes extreme value y at x
thf('func-extreme/3_type',type,(
    'func-extreme/3': 'R2R' > $real > $real > $o )).

%----monotonically-increasing(f) <-> f is monotonically nondecreasing
thf('monotonically-increasing/1_type',type,(
    'monotonically-increasing/1': 'R2R' > $o )).

%----monotonically-decreasing(f) <-> f is monotonically nonincreasing
thf('monotonically-decreasing/1_type',type,(
    'monotonically-decreasing/1': 'R2R' > $o )).

%----increasing-at(f, a) <-> f is nondecreasing at a
thf('increasing-at/2_type',type,(
    'increasing-at/2': 'R2R' > $real > $o )).

%----decreasing-at(f, a) <-> f is nonincreasing at a
thf('decreasing-at/2_type',type,(
    'decreasing-at/2': 'R2R' > $real > $o )).

%----fun-convex-downward(f, set) <-> f is downward convex on set
thf('fun-convex-downward/2_type',type,(
    'fun-convex-downward/2': 'R2R' > ( 'SetOf' @ $real ) > $o )).

%----fun-convex-upward(f, set) <-> f is upward convex on set
thf('fun-convex-upward/2_type',type,(
    'fun-convex-upward/2': 'R2R' > ( 'SetOf' @ $real ) > $o )).

%----fun-convex-downward(f) <-> f is downward convex on R
thf('fun-convex-downward/1_type',type,(
    'fun-convex-downward/1': 'R2R' > $o )).

%----fun-convex-upward(f) <-> f is upward convex on R
thf('fun-convex-upward/1_type',type,(
    'fun-convex-upward/1': 'R2R' > $o )).

%----converge(f,a,b) <-> the limit of f(x) as x approaches a is b
thf('converge/3_type',type,(
    'converge/3': 'R2R' > $real > $real > $o )).

%----converge-plus(f,a,b) <-> the limit of f(x) as x approaches a from above is b
thf('converge-plus/3_type',type,(
    'converge-plus/3': 'R2R' > $real > $real > $o )).

%----converge-minus(f,a,b) <-> the limit of f(x) as x approaches a from below is b
thf('converge-minus/3_type',type,(
    'converge-minus/3': 'R2R' > $real > $real > $o )).

%----converge-plus-inf(f,b) <-> the limit of f(x) as x approaches infinity is b
thf('converge-plus-inf/2_type',type,(
    'converge-plus-inf/2': 'R2R' > $real > $o )).

%----converge-minus-inf(f,b) <-> the limit of f(x) as x approaches minus infinity is b
thf('converge-minus-inf/2_type',type,(
    'converge-minus-inf/2': 'R2R' > $real > $o )).

%----limit value type
thf('LimitValue_type',type,(
    'LimitValue': $tType )).

%----divergence to +infinity
thf('divergence-to-plus-inf/0_type',type,(
    'divergence-to-plus-inf/0': 'LimitValue' )).

%----divergence to -infinity
thf('divergence-to-minus-inf/0_type',type,(
    'divergence-to-minus-inf/0': 'LimitValue' )).

%----convergence-to(c) = convergence to constant c
thf('convergence-to/1_type',type,(
    'convergence-to/1': $real > 'LimitValue' )).

%----not diverging and not converging
%----the value to which the bound variable in lim_{x->a} f(x) notation approaches
thf('TendsToValue_type',type,(
    'TendsToValue': $tType )).

%----x -> +inf
thf('tends-to-plus-inf/0_type',type,(
    'tends-to-plus-inf/0': 'TendsToValue' )).

%----x -> -inf
thf('tends-to-minus-inf/0_type',type,(
    'tends-to-minus-inf/0': 'TendsToValue' )).

%----x -> a-0
thf('tends-to-from-left/1_type',type,(
    'tends-to-from-left/1': $real > 'TendsToValue' )).

%----x -> a+0
thf('tends-to-from-right/1_type',type,(
    'tends-to-from-right/1': $real > 'TendsToValue' )).

%----x -> a
thf('tends-to/1_type',type,(
    'tends-to/1': $real > 'TendsToValue' )).

%----limit(f,a) = the limit of f(x) as x tends to a
thf('limit/2_type',type,(
    'limit/2': 'R2R' > 'TendsToValue' > 'LimitValue' )).

%----continuous(f,set) <-> f is continuous on set
thf('continuous/2_type',type,(
    'continuous/2': 'R2R' > ( 'SetOf' @ $real ) > $o )).

%----differentiable(f,set) <-> f is differentiable on set
thf('differentiable/2_type',type,(
    'differentiable/2': 'R2R' > ( 'SetOf' @ $real ) > $o )).

%----poly-fun([a0,...,an]) = the polynomial function an x^n + ... + a0
thf('poly-fun/1_type',type,(
    'poly-fun/1': ( 'ListOf' @ $real ) > 'R2R' )).

%-------------------------------------------------------------------------------
%----Intervals
%-------------------------------------------------------------------------------
%----endpoint of intervals
thf('EndPoint_type',type,(
    'EndPoint': $tType )).

%----ep-close(a) = a of the type EndPoint expressing the point a is contained 
%----in the interval
thf('ep-close/1_type',type,(
    'ep-close/1': $real > 'EndPoint' )).

%----ep-close(a) = a of the type EndPoint expressing the point a is not contained 
%----in the interval
thf('ep-open/1_type',type,(
    'ep-open/1': $real > 'EndPoint' )).

%----ep-inf = constant of the type EndPoint expressing infinity
thf('ep-inf/0_type',type,(
    'ep-inf/0': 'EndPoint' )).

%----test-range-hi(x,a) <-> x is bounded by a from upper
thf('test-range-hi/2_type',type,(
    'test-range-hi/2': $real > 'EndPoint' > $o )).

%----test-range-hi(x,a) <-> x is bounded by a from below
thf('test-range-lo/2_type',type,(
    'test-range-lo/2': 'EndPoint' > $real > $o )).

%----range(a,b) = the interval expressed by a and b
thf('range/2_type',type,(
    'range/2': 'EndPoint' > 'EndPoint' > ( 'SetOf' @ $real ) )).

%-------------------------------------------------------------------------------
%----min/max
%-------------------------------------------------------------------------------
%----max-of(P) = the maximum value among those that satisfy P
thf('max-of/1_type',type,(
    'max-of/1': ( $real > $o ) > $real )).

%----min-of(P) = the minimum value among those that satisfy P
thf('min-of/1_type',type,(
    'min-of/1': ( $real > $o ) > $real )).

%----maximum(set, a) <-> a is the maximum value of set
thf('maximum/2_type',type,(
    'maximum/2': ( 'SetOf' @ $real ) > $real > $o )).

%----minimum(set, a) <-> a is the minimum value of set
thf('minimum/2_type',type,(
    'minimum/2': ( 'SetOf' @ $real ) > $real > $o )).

%----maximum(set, < ,a) <-> a is the maximum value of set with an order <
thf('maximum/3_type',type,(
    'maximum/3': 
      !>[Tv0: $tType] :
        ( ( 'SetOf' @ Tv0 ) > ( Tv0 > Tv0 > $o ) > Tv0 > $o ) )).

%----minimum(set, < ,a) <-> a is the minimum value of set with an order <
thf('minimum/3_type',type,(
    'minimum/3': 
      !>[Tv0: $tType] :
        ( ( 'SetOf' @ Tv0 ) > ( Tv0 > Tv0 > $o ) > Tv0 > $o ) )).

%-------------------------------------------------------------------------------
%----Equations
%-------------------------------------------------------------------------------
%----Equations
thf('Equation_type',type,(
    'Equation': $tType )).

%----equation(f) = the equation "f = 0"
thf('equation/1_type',type,(
    'equation/1': ( $real > $real ) > 'Equation' )).

%----poly-equation([a0,...,an]) = the equation "an x^n + ... + a0 = 0" 
thf('poly-equation/1_type',type,(
    'poly-equation/1': ( 'ListOf' @ $real ) > 'Equation' )).

%----trivially true for any equation of type Equation
thf('is-equation/1_type',type,(
    'is-equation/1': 'Equation' > $o )).

%----has-real-solution(phi) <-> phi has a real solution
thf('has-real-solution/1_type',type,(
    'has-real-solution/1': 'Equation' > $o )).

%----is-solution-of(a, phi) <-> a is a solution of phi in the domain
%----domain is either real numbers or complex numbers depending on problems
thf('is-solution-of/2_type',type,(
    'is-solution-of/2': $real > 'Equation' > $o )).

%----are-solutions-of(list, phi) <-> list is the list of all solutions of phi in 
%----the domain; domain is either real numbers or complex numbers depending on problems
thf('are-solutions-of/2_type',type,(
    'are-solutions-of/2': ( 'ListOf' @ $real ) > 'Equation' > $o )).

%----is-real-solution-of(a, phi) <-> a is a real solution of phi
thf('is-real-solution-of/2_type',type,(
    'is-real-solution-of/2': $real > 'Equation' > $o )).

%----are-real-solutions-of(list, phi) <-> list is the list of all real solutions of phi
thf('are-real-solutions-of/2_type',type,(
    'are-real-solutions-of/2': ( 'ListOf' @ $real ) > 'Equation' > $o )).

%----is-equation-deg-of(n, phi) <-> phi is a univariate polynomial equation and 
%----the polynomial has degree n.
thf('is-equation-deg-of/2_type',type,(
    'is-equation-deg-of/2': $int > 'Equation' > $o )).

%----is-multiple-root-of(a, phi) <-> a is a multiple root of phi
thf('is-multiple-root-of/2_type',type,(
    'is-multiple-root-of/2': $real > 'Equation' > $o )).

%----is-n-multiple-root-of(n, a, phi) <-> a is a root of multiplicity n of phi
thf('is-n-multiple-root-of/3_type',type,(
    'is-n-multiple-root-of/3': $int > $real > 'Equation' > $o )).

%----equation-determinant(phi) = the determinant of phi
%----effective only if phi is a quadratic equation
thf('equation-determinant/1_type',type,(
    'equation-determinant/1': 'Equation' > $real )).

%----equation-deg(f) = the polynomial degree of f
%----effective only if f is a polynomial equation
thf('equation-deg/1_type',type,(
    'equation-deg/1': 'Equation' > $int )).

%----equation-coefficients-of(f) = the list of coefficients of in the ascending order of the degrees
%----effective only if f is a polynomial equation
thf('equation-coefficients-of/1_type',type,(
    'equation-coefficients-of/1': 'Equation' > ( 'ListOf' @ $real ) )).

%-------------------------------------------------------------------------------
%----Implementation of Real polynomials as a list
%-------------------------------------------------------------------------------
%----poly+(f,g) = the sum of f and g in the polynomial space
thf('poly+/2_type',type,(
    'poly+/2': ( 'ListOf' @ $real ) > ( 'ListOf' @ $real ) > ( 'ListOf' @ $real ) )).

%----poly-(f,g) = the difference of f and g in the polynomial space
thf('poly-/2_type',type,(
    'poly-/2': ( 'ListOf' @ $real ) > ( 'ListOf' @ $real ) > ( 'ListOf' @ $real ) )).

%----poly-s*(a,f) = the scalar product of a and f in the polynomial space
thf('poly-s*/2_type',type,(
    'poly-s*/2': $real > ( 'ListOf' @ $real ) > ( 'ListOf' @ $real ) )).

%----poly*(f,g) = the product of f and g in the polynomial space
thf('poly*/2_type',type,(
    'poly*/2': ( 'ListOf' @ $real ) > ( 'ListOf' @ $real ) > ( 'ListOf' @ $real ) )).

%----poly^(f,n) = the power of f to n in the polynomial space
thf('poly^/2_type',type,(
    'poly^/2': ( 'ListOf' @ $real ) > $int > ( 'ListOf' @ $real ) )).

%----poly-div(f,g) = quotient of f/g
thf('poly-div/2_type',type,(
    'poly-div/2': ( 'ListOf' @ $real ) > ( 'ListOf' @ $real ) > ( 'ListOf' @ $real ) )).

%----poly-mod(f,g) = remainder of f/g
thf('poly-mod/2_type',type,(
    'poly-mod/2': ( 'ListOf' @ $real ) > ( 'ListOf' @ $real ) > ( 'ListOf' @ $real ) )).

%----poly-divmod(f,g,q,r) <-> q is the quotient and r is the remainder of polynomial 
%----division with remainder of f and g
thf('poly-divmod/4_type',type,(
    'poly-divmod/4': ( 'ListOf' @ $real ) > ( 'ListOf' @ $real ) > ( 'ListOf' @ $real ) > ( 'ListOf' @ $real ) > $o )).

%----poly-value(f,a) = the value of f evaluated at a
thf('poly-value/2_type',type,(
    'poly-value/2': ( 'ListOf' @ $real ) > $real > $real )).

%----poly-deg(f) = the degree of f
thf('poly-deg/1_type',type,(
    'poly-deg/1': ( 'ListOf' @ $real ) > $int )).

%----poly-deriv(f) = derivative of polynomial f
thf('poly-deriv/1_type',type,(
    'poly-deriv/1': ( 'ListOf' @ $real ) > ( 'ListOf' @ $real ) )).

%----constant-term(f) = the constant coefficient of f
thf('constant-term/1_type',type,(
    'constant-term/1': ( 'ListOf' @ $real ) > $real )).

%----poly-equal(f,g) <-> f and g is the same polynomial
%----ignores the difference in higher degree terms with coefficient 0
thf('poly-equal/2_type',type,(
    'poly-equal/2': ( 'ListOf' @ $real ) > ( 'ListOf' @ $real ) > $o )).

%----poly-divisible-by(f,g) <-> f is divisible by g
thf('poly-divisible-by/2_type',type,(
    'poly-divisible-by/2': ( 'ListOf' @ $real ) > ( 'ListOf' @ $real ) > $o )).

%----Real Polynomial
thf('Polynomial_type',type,(
    'Polynomial': $tType )).

%----polynomial constructor
thf('polynomial/1_type',type,(
    'polynomial/1': ( 'ListOf' @ $real ) > 'Polynomial' )).

%----trivially true for any polynomial of type Polynomial
thf('is-polynomial/1_type',type,(
    'is-polynomial/1': 'Polynomial' > $o )).

%----polynomial+(f,g) = the sum of f and g in the polynomial space
thf('polynomial+/2_type',type,(
    'polynomial+/2': 'Polynomial' > 'Polynomial' > 'Polynomial' )).

%----polynomial-(f,g) = the difference of f and g in the polynomial space
thf('polynomial-/2_type',type,(
    'polynomial-/2': 'Polynomial' > 'Polynomial' > 'Polynomial' )).

%----polynomial-s*(a,f) = the scalar product of a and f in the polynomial space
thf('polynomial-s*/2_type',type,(
    'polynomial-s*/2': $real > 'Polynomial' > 'Polynomial' )).

%----polynomial*(f,g) = the product of f and g in the polynomial space
thf('polynomial*/2_type',type,(
    'polynomial*/2': 'Polynomial' > 'Polynomial' > 'Polynomial' )).

%----polynomial^(f,n) = the power of f to n in the polynomial space
thf('polynomial^/2_type',type,(
    'polynomial^/2': 'Polynomial' > $int > 'Polynomial' )).

%----polynomial-div(f, g) = quotient of division f/g
thf('polynomial-div/2_type',type,(
    'polynomial-div/2': 'Polynomial' > 'Polynomial' > 'Polynomial' )).

%----polynomial-mod(f, g) = remainder of division f/g
thf('polynomial-mod/2_type',type,(
    'polynomial-mod/2': 'Polynomial' > 'Polynomial' > 'Polynomial' )).

%----polynomial-divmod(f,g,q,r) <-> q is the quotient and r is the remainder 
%----of polynomial division with remainder of f and g
thf('polynomial-divmod/4_type',type,(
    'polynomial-divmod/4': 'Polynomial' > 'Polynomial' > 'Polynomial' > 'Polynomial' > $o )).

%----polynomial-divisible-by(f,g) <-> f is divisible by g
thf('polynomial-divisible-by/2_type',type,(
    'polynomial-divisible-by/2': 'Polynomial' > 'Polynomial' > $o )).

%----polynomial-value(f,a) = the value of f evaluated at a
thf('polynomial-value/2_type',type,(
    'polynomial-value/2': 'Polynomial' > $real > $real )).

%----polynomial-deg(f) = the degree of f
thf('polynomial-deg/1_type',type,(
    'polynomial-deg/1': 'Polynomial' > $int )).

%----polynomial-sum(list) = the sum of members in list in the polynomial space
thf('polynomial-sum/1_type',type,(
    'polynomial-sum/1': ( 'ListOf' @ 'Polynomial' ) > 'Polynomial' )).

%----polynomial-product(list) = the product of members in list in the polynomial space
thf('polynomial-product/1_type',type,(
    'polynomial-product/1': ( 'ListOf' @ 'Polynomial' ) > 'Polynomial' )).

%----poly2list(f) = the list [f0,...,fn] of coefficient of f
thf('poly2list/1_type',type,(
    'poly2list/1': 'Polynomial' > ( 'ListOf' @ $real ) )).

%----division operation
thf('PolynomialDivision_type',type,(
    'PolynomialDivision': $tType )).

thf('polynomial-division/2_type',type,(
    'polynomial-division/2': 'Polynomial' > 'Polynomial' > 'PolynomialDivision' )).

thf('polynomial-quot-of/1_type',type,(
    'polynomial-quot-of/1': 'PolynomialDivision' > 'Polynomial' )).

thf('polynomial-rem-of/1_type',type,(
    'polynomial-rem-of/1': 'PolynomialDivision' > 'Polynomial' )).

%----list of coefficients (in the ascending order of the degrees)
thf('polynomial-coefficients-of/1_type',type,(
    'polynomial-coefficients-of/1': 'Polynomial' > ( 'ListOf' @ $real ) )).

%---------------------------------------------------------------------------------------
%
%----Boolean formula expressed as a term
%
%---------------------------------------------------------------------------------------
%----Proposition type: to represent a proposition as a term
thf('Prop_type',type,(
    'Prop': $tType )).

%----prop(^ [_: unit] : P) means 'P'
thf('prop/1_type',type,(
    'prop/1': ( 'Unit' > $o ) > 'Prop' )).

%----hold(prop(^ [_: unit] P)) <-> P
thf('hold/1_type',type,(
    'hold/1': 'Prop' > $o )).

%----hold-open(prop(^ [_: unit] P)) <-> P
thf('hold-open/1_type',type,(
    'hold-open/1': 'Prop' > $o )).

%----trivially true for any Prop
thf('is-proposition/1_type',type,(
    'is-proposition/1': 'Prop' > $o )).

%----Logical connectives
thf('and/2_type',type,(
    'and/2': 'Prop' > 'Prop' > 'Prop' )).

thf('or/2_type',type,(
    'or/2': 'Prop' > 'Prop' > 'Prop' )).

thf('not/1_type',type,(
    'not/1': 'Prop' > 'Prop' )).

thf('impl/2_type',type,(
    'impl/2': 'Prop' > 'Prop' > 'Prop' )).

thf('equiv/2_type',type,(
    'equiv/2': 'Prop' > 'Prop' > 'Prop' )).

%----Ratio between two or more real numbers
thf('Ratio_type',type,(
    'Ratio': $tType )).

%----ratio([a,b,..,c]) = a : b : .. : c
thf('ratio/1_type',type,(
    'ratio/1': ( 'ListOf' @ $real ) > 'Ratio' )).

%-------------------------------------------------------------------------------
%----Derivative sign chart
%-------------------------------------------------------------------------------
thf('DerivSignChart_type',type,(
    'DerivSignChart': $tType )).

thf('deriv-sign-chart-of/1_type',type,(
    'deriv-sign-chart-of/1': 'R2R' > 'DerivSignChart' )).

%---------------------------------------------------------------------------------------
%----Relations between two formulas
%---------------------------------------------------------------------------------------
%----is-counter-example-of(A, B) <-> A and B contradicts
thf('is-counter-example-of/2_type',type,(
    'is-counter-example-of/2': 'Prop' > 'Prop' > $o )).

%----is-contrapositive-of(A, B) <-> A is syntactically the contrapositive of B
thf('is-contrapositive-of/2_type',type,(
    'is-contrapositive-of/2': 'Prop' > 'Prop' > $o )).

%----is-converse-of(A, B) <-> A is syntactically the converse of B
thf('is-converse-of/2_type',type,(
    'is-converse-of/2': 'Prop' > 'Prop' > $o )).

%----is-inverse-of(A, B) <-> A is syntactically the inverse of B
thf('is-inverse-of/2_type',type,(
    'is-inverse-of/2': 'Prop' > 'Prop' > $o )).

%----is-equivalent-to(A, B) <-> (A <-> B)
thf('is-equivalent-to/2_type',type,(
    'is-equivalent-to/2': 'Prop' > 'Prop' > $o )).

%----is-equivalent-to(A, B) <-> (A -> B)
thf('is-necessary-condition-of/2_type',type,(
    'is-necessary-condition-of/2': 'Prop' > 'Prop' > $o )).

%----is-equivalent-to(A, B) <-> (A <- B)
thf('is-sufficient-condition-of/2_type',type,(
    'is-sufficient-condition-of/2': 'Prop' > 'Prop' > $o )).

%----is-antecedent-of(A, B) <-> A is syntactically B's antecedent
thf('is-antecedent-of/2_type',type,(
    'is-antecedent-of/2': 'Prop' > 'Prop' > $o )).

%----is-succedent-of(A, B) <-> A is syntactically B's succedent
thf('is-succedent-of/2_type',type,(
    'is-succedent-of/2': 'Prop' > 'Prop' > $o )).

%---------------------------------------------------------------------------------------
%----partial functions frop Prop -> Prop
%----has value only when the argument is in the form of (impl _ _)
%---------------------------------------------------------------------------------------
thf('contrapositive-of/1_type',type,(
    'contrapositive-of/1': 'Prop' > 'Prop' )).

thf('converse-of/1_type',type,(
    'converse-of/1': 'Prop' > 'Prop' )).

thf('inverse-of/1_type',type,(
    'inverse-of/1': 'Prop' > 'Prop' )).

thf('antecedent-of/1_type',type,(
    'antecedent-of/1': 'Prop' > 'Prop' )).

thf('succedent-of/1_type',type,(
    'succedent-of/1': 'Prop' > 'Prop' )).

%---------------------------------------------------------------------------------------
%----Implementations
%---------------------------------------------------------------------------------------
%----is-proposition(P): trivially true for any object of type Prop
thf('.def-is-proposition_axiom',axiom,(
    ! [V_p: 'Prop'] :
      ( 'is-proposition/1' @ V_p ) )).

%----NOTE: conflicts with the definitions about the syntactic properties
%----TODO: replace this with syntactic identity
thf('.def-prop-equality_axiom',axiom,(
    ! [V_p: ( 'Unit' > $o ),V_q: ( 'Unit' > $o )] :
      ( ( ( 'prop/1' @ V_p )
        = ( 'prop/1' @ V_q ) )
    <=> ( V_p = V_q ) ) )).

thf('.def_contrapositive_axiom',axiom,(
    ! [V_p: 'Prop',V_q: 'Prop',V_r: 'Prop',V_s: 'Prop'] :
      ( ( 'is-contrapositive-of/2' @ ( 'impl/2' @ V_p @ V_q ) @ ( 'impl/2' @ V_r @ V_s ) )
    <=> ( ( 'is-equivalent-to/2' @ ( 'not/1' @ V_q ) @ V_r )
        & ( 'is-equivalent-to/2' @ ( 'not/1' @ V_p ) @ V_s ) ) ) )).

thf('.def-is-converse-of_axiom',axiom,(
    ! [V_p: 'Prop',V_q: 'Prop',V_r: 'Prop',V_s: 'Prop'] :
      ( ( 'is-converse-of/2' @ ( 'impl/2' @ V_p @ V_q ) @ ( 'impl/2' @ V_r @ V_s ) )
    <=> ( ( 'is-equivalent-to/2' @ V_p @ V_s )
        & ( 'is-equivalent-to/2' @ V_q @ V_r ) ) ) )).

thf('.def-is-inverse-of_axiom',axiom,(
    ! [V_p: 'Prop',V_q: 'Prop',V_r: 'Prop',V_s: 'Prop'] :
      ( ( 'is-inverse-of/2' @ ( 'impl/2' @ V_p @ V_q ) @ ( 'impl/2' @ V_r @ V_s ) )
    <=> ( ( 'is-equivalent-to/2' @ V_p @ ( 'not/1' @ V_r ) )
        & ( 'is-equivalent-to/2' @ V_q @ ( 'not/1' @ V_s ) ) ) ) )).

thf('.def-is-antecedent-of_axiom',axiom,(
    ! [V_p: 'Prop',V_q: 'Prop',V_r: 'Prop'] :
      ( ( 'is-antecedent-of/2' @ V_p @ ( 'impl/2' @ V_q @ V_r ) )
    <=> ( 'is-equivalent-to/2' @ V_p @ V_q ) ) )).

thf('.def-is-succedent-of_axiom',axiom,(
    ! [V_p: 'Prop',V_q: 'Prop',V_r: 'Prop'] :
      ( ( 'is-antecedent-of/2' @ V_p @ ( 'impl/2' @ V_q @ V_r ) )
    <=> ( 'is-equivalent-to/2' @ V_p @ V_r ) ) )).

thf('.def-contrapositive-of_axiom',axiom,(
    ! [V_p: 'Prop',V_q: 'Prop'] :
      ( ( 'contrapositive-of/1' @ ( 'impl/2' @ V_p @ V_q ) )
      = ( 'impl/2' @ ( 'not/1' @ V_q ) @ ( 'not/1' @ V_p ) ) ) )).

thf('.def-converse-of_axiom',axiom,(
    ! [V_p: 'Prop',V_q: 'Prop'] :
      ( ( 'converse-of/1' @ ( 'impl/2' @ V_p @ V_q ) )
      = ( 'impl/2' @ V_q @ V_p ) ) )).

thf('.def-inverse-of_axiom',axiom,(
    ! [V_p: 'Prop',V_q: 'Prop'] :
      ( ( 'inverse-of/1' @ ( 'impl/2' @ V_p @ V_q ) )
      = ( 'impl/2' @ ( 'not/1' @ V_p ) @ ( 'not/1' @ V_q ) ) ) )).

thf('.def-antecedent-of_axiom',axiom,(
    ! [V_p: 'Prop',V_q: 'Prop'] :
      ( ( 'antecedent-of/1' @ ( 'impl/2' @ V_p @ V_q ) )
      = V_p ) )).

thf('.def-succedent-of_axiom',axiom,(
    ! [V_p: 'Prop',V_q: 'Prop'] :
      ( ( 'succedent-of/1' @ ( 'impl/2' @ V_p @ V_q ) )
      = V_q ) )).

thf('.def-hold-open_axiom',axiom,(
    ! [V_p: ( 'Unit' > $o )] :
      ( ( 'hold-open/1' @ ( 'prop/1' @ V_p ) )
    <=> ( V_p @ '_/0' ) ) )).

%------------------------------------------------------------------------------
%
%----Integers
%
%------------------------------------------------------------------------------
%------------------------------------------------------------------------------
%----Integer arithmetic
%------------------------------------------------------------------------------
%----trivially true for any Z
thf('int.is-integer/1_type',type,(
    'int.is-integer/1': $int > $o )).

%----is-natural-number(n) <-> n is a natural number i.e. n is an integer and 1 <= n
thf('int.is-natural-number/1_type',type,(
    'int.is-natural-number/1': $int > $o )).

%----a ^ b = the power of a to b in integers
thf('int.^/2_type',type,(
    'int.^/2': $int > $int > $int )).

%----sum([a1,...,an]) = the sum of a1,...,an in integers
thf('int.sum/1_type',type,(
    'int.sum/1': ( 'ListOf' @ $int ) > $int )).

%----product([a1,...,an]) = the product of a1,...,an in integers
thf('int.product/1_type',type,(
    'int.product/1': ( 'ListOf' @ $int ) > $int )).

%----set-to-list(set) = the list of all elements in set
%----effective only if set is a finite set
thf('int.set-to-list/1_type',type,(
    'int.set-to-list/1': ( 'SetOf' @ $int ) > ( 'ListOf' @ $int ) )).

%----is-cardinality-of(n, set) <-> the number of elements in set is n
%----effective only if set is a finite set
thf('int.is-cardinality-of/2_type',type,(
    'int.is-cardinality-of/2': $int > ( 'SetOf' @ $int ) > $o )).

%----cardinality-of(set) = the number of elements in set
%----effective only if set is a finite set
thf('int.cardinality-of/1_type',type,(
    'int.cardinality-of/1': ( 'SetOf' @ $int ) > $int )).

%----abs(a) = the absolute value of a
thf('int.abs/1_type',type,(
    'int.abs/1': $int > $int )).

%----sign(a) = the sign of a
%----0 if a is 0
thf('int.sign/1_type',type,(
    'int.sign/1': $int > $int )).

%----min(a,b) = a if a<=b holds, and b otherwise
thf('int.min/2_type',type,(
    'int.min/2': $int > $int > $int )).

%----max(a,b) = b if a<=b holds, and a otherwise
thf('int.max/2_type',type,(
    'int.max/2': $int > $int > $int )).

%----factorial(n) = the factorial of n
thf('int.factorial/1_type',type,(
    'int.factorial/1': $int > $int )).

%----permutation(n,k) = the number of k-permutations of n
thf('int.permutation/2_type',type,(
    'int.permutation/2': $int > $int > $int )).

%----combination(n,k) = the number of k-combinations of n
thf('int.combination/2_type',type,(
    'int.combination/2': $int > $int > $int )).

%----is-zero(a) <-> a is equal to 0
thf('int.is-zero/1_type',type,(
    'int.is-zero/1': $int > $o )).

%----is-prime(a) <-> a is a prime number
thf('int.is-prime/1_type',type,(
    'int.is-prime/1': $int > $o )).

%----is-common-divisor-of(n, list) <-> n is a common divisor of the integers in list
thf('int.is-common-divisor-of/2_type',type,(
    'int.is-common-divisor-of/2': $int > ( 'ListOf' @ $int ) > $o )).

%----is-common-multiple-of(n, list) <-> n is a common multiple of the integers in list
thf('int.is-common-multiple-of/2_type',type,(
    'int.is-common-multiple-of/2': $int > ( 'ListOf' @ $int ) > $o )).

%----lcm(a,b) = the least common multiple of a and b
thf('int.lcm/2_type',type,(
    'int.lcm/2': $int > $int > $int )).

%----lcm(list) = the least common multiple of the integers in list
thf('int.lcm/1_type',type,(
    'int.lcm/1': ( 'ListOf' @ $int ) > $int )).

%----gcd(a,b) = the greatest common divisor of a and b
thf('int.gcd/2_type',type,(
    'int.gcd/2': $int > $int > $int )).

%----gcd(list) = the greatest common divisor of the integers in list
thf('int.gcd/1_type',type,(
    'int.gcd/1': ( 'ListOf' @ $int ) > $int )).

%----int2decimal(a) = the list of digits of a in decimal form
thf('int.int2decimal/1_type',type,(
    'int.int2decimal/1': $int > ( 'ListOf' @ $int ) )).

%----int2binary(a) = the list of digits of a in binary form
thf('int.int2binary/1_type',type,(
    'int.int2binary/1': $int > ( 'ListOf' @ $int ) )).

%----ordinal(n) = the list [0,...,n-1]
thf('int.ordinal/1_type',type,(
    'int.ordinal/1': $int > ( 'ListOf' @ $int ) )).

%----num-of-digits(n) = the number of digits of n in decimal base
thf('int.num-of-digits/1_type',type,(
    'int.num-of-digits/1': $int > $int )).

%----maximum(set,n) <-> n is the maximum in set
thf('int.maximum/2_type',type,(
    'int.maximum/2': ( 'SetOf' @ $int ) > $int > $o )).

%----minimum(set,n) <-> n is the minimum in set
thf('int.minimum/2_type',type,(
    'int.minimum/2': ( 'SetOf' @ $int ) > $int > $o )).

%----is-odd-number(n) <-> n is an odd number
thf('int.is-odd-number/1_type',type,(
    'int.is-odd-number/1': $int > $o )).

%----is-even-number(n) <-> n is an even number
thf('int.is-even-number/1_type',type,(
    'int.is-even-number/1': $int > $o )).

%----are-coprime(list) <-> the greatest common divisor of the integers in list is 1
thf('int.are-coprime/1_type',type,(
    'int.are-coprime/1': ( 'ListOf' @ $int ) > $o )).

%----are-coprime(a,b) <-> the greatest common divisor of a and b is 1
thf('int.are-coprime/2_type',type,(
    'int.are-coprime/2': $int > $int > $o )).

%----is-divisible-by(a,b) <-> a is divisible by b
thf('int.is-divisible-by/2_type',type,(
    'int.is-divisible-by/2': $int > $int > $o )).

%----is-lattice-point(list) <-> list is a list of integers of length two
thf('int.is-lattice-point/1_type',type,(
    'int.is-lattice-point/1': ( 'ListOf' @ $int ) > $o )).

%----x-coord([a,b]) = a
%----effective only if the argument is of length two
thf('int.x-coord/1_type',type,(
    'int.x-coord/1': ( 'ListOf' @ $int ) > $int )).

%----y-coord([a,b]) = b
%----effective only if the argument is of length two
thf('int.y-coord/1_type',type,(
    'int.y-coord/1': ( 'ListOf' @ $int ) > $int )).

%----is-square-number(n) <-> n is a square number
thf('int.is-square-number/1_type',type,(
    'int.is-square-number/1': $int > $o )).

%----finseq(f(*), m, n) = the list [f(m), ...., f(n)]
thf('int.finseq/3_type',type,(
    'int.finseq/3': ( $int > $int ) > $int > $int > ( 'ListOf' @ $int ) )).

%------------------------------------------------------------------------------
%----finiteness of a set of integers
%------------------------------------------------------------------------------
thf('int.is-finite-set/1_type',type,(
    'int.is-finite-set/1': ( 'SetOf' @ $int ) > $o )).

thf('int.is-infinite-set/1_type',type,(
    'int.is-infinite-set/1': ( 'SetOf' @ $int ) > $o )).

%----iota(m,n) = the list [m, ..., n]
%----iota(m,n) is [m, m+1, ..., n] if m <= n, and [m, m-1, ..., n] if n < m
thf('int.iota/2_type',type,(
    'int.iota/2': $int > $int > ( 'ListOf' @ $int ) )).

%------------------------------------------------------------------------------
%
%----Rational Numbers
%
%------------------------------------------------------------------------------
%------------------------------------------------------------------------------
%----Rational Numbers
%------------------------------------------------------------------------------
%----a ^ b = the power of a to b in rational numbers
thf('rat.^/2_type',type,(
    'rat.^/2': $rat > $int > $rat )).

%----abs(a) = the absolute value of a
thf('rat.abs/1_type',type,(
    'rat.abs/1': $rat > $rat )).

%----sum([a1,...,an]) = the sum of a1,...,an in rational numbers
thf('rat.sum/1_type',type,(
    'rat.sum/1': ( 'ListOf' @ $rat ) > $rat )).

%----product([a1,...,an]) = the product of a1,...,an in rational numbers
thf('rat.product/1_type',type,(
    'rat.product/1': ( 'ListOf' @ $rat ) > $rat )).

%------------------------------------------------------------------------------
%
%----Real Polynomials
%
%------------------------------------------------------------------------------
thf('.def_range_elem_axiom',axiom,(
    ! [V_x: $real,V_lo: 'EndPoint',V_hi: 'EndPoint'] :
      ( ( 'elem/2' @ $real @ V_x @ ( 'range/2' @ V_lo @ V_hi ) )
    <=> ( ( 'test-range-hi/2' @ V_x @ V_hi )
        & ( 'test-range-lo/2' @ V_lo @ V_x ) ) ) )).

thf('.def_range_equality_axiom',axiom,(
    ! [V_lo1: 'EndPoint',V_hi1: 'EndPoint',V_lo2: 'EndPoint',V_hi2: 'EndPoint'] :
      ( ( ( 'range/2' @ V_lo1 @ V_hi1 )
        = ( 'range/2' @ V_lo2 @ V_hi2 ) )
    <=> ( ( V_lo1 = V_lo2 )
        & ( V_hi1 = V_hi2 ) ) ) )).

thf('.def_endpoint_equality_close_axiom',axiom,(
    ! [V_e1: $real,V_e2: $real] :
      ( ( ( 'ep-close/1' @ V_e1 )
        = ( 'ep-close/1' @ V_e2 ) )
    <=> ( V_e1 = V_e2 ) ) )).

thf('.def_endpoint_equality_open_axiom',axiom,(
    ! [V_e1: $real,V_e2: $real] :
      ( ( ( 'ep-open/1' @ V_e1 )
        = ( 'ep-open/1' @ V_e2 ) )
    <=> ( V_e1 = V_e2 ) ) )).

thf('.def_endpoint_equality_infinity_axiom',axiom,(
    'ep-inf/0' = 'ep-inf/0' )).

thf('.def_endpoint_non_equality_close_open_axiom',axiom,(
    ! [V_e1: $real,V_e2: $real] :
      ( ( ( 'ep-open/1' @ V_e1 )
        = ( 'ep-close/1' @ V_e2 ) )
    <=> $false ) )).

thf('.def_endpoint_non_equality_open_infinity_axiom',axiom,(
    ! [V_e1: $real] :
      ( ( ( 'ep-open/1' @ V_e1 )
        = 'ep-inf/0' )
    <=> $false ) )).

thf('.def_endpoint_non_equality_close_infinity_axiom',axiom,(
    ! [V_e1: $real] :
      ( ( ( 'ep-close/1' @ V_e1 )
        = 'ep-inf/0' )
    <=> $false ) )).

thf('.def_test_range_hi_close_axiom',axiom,(
    ! [V_x: $real,V_hi: $real] :
      ( ( 'test-range-hi/2' @ V_x @ ( 'ep-close/1' @ V_hi ) )
    <=> ( $lesseq @ V_x @ V_hi ) ) )).

thf('.def_test_range_hi_open_axiom',axiom,(
    ! [V_x: $real,V_hi: $real] :
      ( ( 'test-range-hi/2' @ V_x @ ( 'ep-open/1' @ V_hi ) )
    <=> ( $less @ V_x @ V_hi ) ) )).

thf('.def_test_range_hi_inf_axiom',axiom,(
    ! [V_x: $real] :
      ( 'test-range-hi/2' @ V_x @ 'ep-inf/0' ) )).

thf('.def_test_range_lo_close_axiom',axiom,(
    ! [V_x: $real,V_lo: $real] :
      ( ( 'test-range-lo/2' @ ( 'ep-close/1' @ V_lo ) @ V_x )
    <=> ( $lesseq @ V_lo @ V_x ) ) )).

thf('.def_test_range_lo_open_axiom',axiom,(
    ! [V_x: $real,V_lo: $real] :
      ( ( 'test-range-lo/2' @ ( 'ep-open/1' @ V_lo ) @ V_x )
    <=> ( $less @ V_lo @ V_x ) ) )).

thf('.def_test_range_lo_inf_axiom',axiom,(
    ! [V_x: $real] :
      ( 'test-range-lo/2' @ 'ep-inf/0' @ V_x ) )).

thf('.def-is-lower-bound-of-range-lo-open_axiom',axiom,(
    ! [V_x: $real,V_lo: $real,V_hi: 'EndPoint'] :
      ( ( 'is-lower-bound-of/2' @ V_x @ ( 'range/2' @ ( 'ep-open/1' @ V_lo ) @ V_hi ) )
    <=> ( $lesseq @ V_x @ V_lo ) ) )).

thf('.def-is-lower-bound-of-range-lo-close_axiom',axiom,(
    ! [V_x: $real,V_lo: $real,V_hi: 'EndPoint'] :
      ( ( 'is-lower-bound-of/2' @ V_x @ ( 'range/2' @ ( 'ep-close/1' @ V_lo ) @ V_hi ) )
    <=> ( $lesseq @ V_x @ V_lo ) ) )).

thf('.def-is-lower-bound-of-range-lo-inf_axiom',axiom,(
    ! [V_x: $real,V_hi: 'EndPoint'] :
      ( ( 'is-lower-bound-of/2' @ V_x @ ( 'range/2' @ 'ep-inf/0' @ V_hi ) )
    <=> $false ) )).

thf('.def-is-upper-bound-of-range-hi-open_axiom',axiom,(
    ! [V_x: $real,V_lo: 'EndPoint',V_hi: $real] :
      ( ( 'is-upper-bound-of/2' @ V_x @ ( 'range/2' @ V_lo @ ( 'ep-open/1' @ V_hi ) ) )
    <=> ( $lesseq @ V_hi @ V_x ) ) )).

thf('.def-is-upper-bound-of-range-hi-close_axiom',axiom,(
    ! [V_x: $real,V_lo: 'EndPoint',V_hi: $real] :
      ( ( 'is-upper-bound-of/2' @ V_x @ ( 'range/2' @ V_lo @ ( 'ep-close/1' @ V_hi ) ) )
    <=> ( $lesseq @ V_hi @ V_x ) ) )).

thf('.def-is-upper-bound-of-range-hi-inf_axiom',axiom,(
    ! [V_x: $real,V_lo: 'EndPoint'] :
      ( ( 'is-upper-bound-of/2' @ V_x @ ( 'range/2' @ V_lo @ 'ep-inf/0' ) )
    <=> $false ) )).

thf('.def-is-inf-of-range-lo-open_axiom',axiom,(
    ! [V_x: $real,V_lo: $real,V_hi: 'EndPoint'] :
      ( ( 'is-inf-of/2' @ V_x @ ( 'range/2' @ ( 'ep-open/1' @ V_lo ) @ V_hi ) )
    <=> ( V_x = V_lo ) ) )).

thf('.def-is-inf-of-range-lo-close_axiom',axiom,(
    ! [V_x: $real,V_lo: $real,V_hi: 'EndPoint'] :
      ( ( 'is-inf-of/2' @ V_x @ ( 'range/2' @ ( 'ep-close/1' @ V_lo ) @ V_hi ) )
    <=> ( V_x = V_lo ) ) )).

thf('.def-is-inf-of-range-lo-inf_axiom',axiom,(
    ! [V_x: $real,V_hi: 'EndPoint'] :
      ( ( 'is-inf-of/2' @ V_x @ ( 'range/2' @ 'ep-inf/0' @ V_hi ) )
    <=> $false ) )).

thf('.def-is-sup-of-range-hi-open_axiom',axiom,(
    ! [V_x: $real,V_lo: 'EndPoint',V_hi: $real] :
      ( ( 'is-sup-of/2' @ V_x @ ( 'range/2' @ V_lo @ ( 'ep-open/1' @ V_hi ) ) )
    <=> ( V_hi = V_x ) ) )).

thf('.def-is-sup-of-range-hi-close_axiom',axiom,(
    ! [V_x: $real,V_lo: 'EndPoint',V_hi: $real] :
      ( ( 'is-sup-of/2' @ V_x @ ( 'range/2' @ V_lo @ ( 'ep-close/1' @ V_hi ) ) )
    <=> ( V_hi = V_x ) ) )).

thf('.def-is-sup-of-range-hi-inf_axiom',axiom,(
    ! [V_x: $real,V_lo: 'EndPoint'] :
      ( ( 'is-sup-of/2' @ V_x @ ( 'range/2' @ V_lo @ 'ep-inf/0' ) )
    <=> $false ) )).

thf('.def_poly_value_nil_axiom',axiom,(
    ! [V_x: $real] :
      ( ( 'poly-value/2' @ ( 'nil/0' @ $real ) @ V_x )
      = 0.0 ) )).

thf('.def_poly_value_cons_axiom',axiom,(
    ! [V_c: $real,V_cs: ( 'ListOf' @ $real ),V_x: $real] :
      ( ( 'poly-value/2' @ ( 'cons/2' @ $real @ V_c @ V_cs ) @ V_x )
      = ( $sum @ V_c @ ( $product @ V_x @ ( 'poly-value/2' @ V_cs @ V_x ) ) ) ) )).

thf('.def_poly_equal_nil0_axiom',axiom,(
    ! [V_bs: ( 'ListOf' @ $real )] :
      ( ( 'poly-equal/2' @ V_bs @ ( 'nil/0' @ $real ) )
    <=> ( 'all/2' @ $real
        @ ^ [V_x: $real] : ( V_x = 0.0 )
        @ V_bs ) ) )).

thf('.def_poly_equal_nil1_axiom',axiom,(
    ! [V_as: ( 'ListOf' @ $real )] :
      ( ( 'poly-equal/2' @ ( 'nil/0' @ $real ) @ V_as )
    <=> ( 'all/2' @ $real
        @ ^ [V_x: $real] : ( V_x = 0.0 )
        @ V_as ) ) )).

thf('.def_poly_equal_cons_axiom',axiom,(
    ! [V_a0: $real,V_as: ( 'ListOf' @ $real ),V_b0: $real,V_bs: ( 'ListOf' @ $real )] :
      ( ( 'poly-equal/2' @ ( 'cons/2' @ $real @ V_a0 @ V_as ) @ ( 'cons/2' @ $real @ V_b0 @ V_bs ) )
    <=> ( ( V_a0 = V_b0 )
        & ( 'poly-equal/2' @ V_as @ V_bs ) ) ) )).

thf('.def_poly_plus_nil0_axiom',axiom,(
    ! [V_bs: ( 'ListOf' @ $real )] :
      ( ( 'poly+/2' @ ( 'nil/0' @ $real ) @ V_bs )
      = V_bs ) )).

thf('.def_poly_plus_nil1_axiom',axiom,(
    ! [V_as: ( 'ListOf' @ $real )] :
      ( ( 'poly+/2' @ V_as @ ( 'nil/0' @ $real ) )
      = V_as ) )).

thf('.def_poly_plus_cons_axiom',axiom,(
    ! [V_a0: $real,V_as: ( 'ListOf' @ $real ),V_b0: $real,V_bs: ( 'ListOf' @ $real )] :
      ( ( 'poly+/2' @ ( 'cons/2' @ $real @ V_a0 @ V_as ) @ ( 'cons/2' @ $real @ V_b0 @ V_bs ) )
      = ( 'cons/2' @ $real @ ( $sum @ V_a0 @ V_b0 ) @ ( 'poly+/2' @ V_as @ V_bs ) ) ) )).

thf('.def_poly_minus_nil0_axiom',axiom,(
    ! [V_bs: ( 'ListOf' @ $real )] :
      ( ( 'poly-/2' @ ( 'nil/0' @ $real ) @ V_bs )
      = ( 'map/2' @ $real @ $real
        @ ^ [V_x: $real] :
            ( $difference @ 0.0 @ V_x )
        @ V_bs ) ) )).

thf('.def_poly_minus_nil1_axiom',axiom,(
    ! [V_as: ( 'ListOf' @ $real )] :
      ( ( 'poly-/2' @ V_as @ ( 'nil/0' @ $real ) )
      = V_as ) )).

thf('.def_poly_minus_cons_axiom',axiom,(
    ! [V_a0: $real,V_as: ( 'ListOf' @ $real ),V_b0: $real,V_bs: ( 'ListOf' @ $real )] :
      ( ( 'poly-/2' @ ( 'cons/2' @ $real @ V_a0 @ V_as ) @ ( 'cons/2' @ $real @ V_b0 @ V_bs ) )
      = ( 'cons/2' @ $real @ ( $difference @ V_a0 @ V_b0 ) @ ( 'poly-/2' @ V_as @ V_bs ) ) ) )).

thf('.def_poly_scalar_prod_axiom',axiom,(
    ! [V_a: $real,V_cs: ( 'ListOf' @ $real )] :
      ( ( 'poly-s*/2' @ V_a @ V_cs )
      = ( 'map/2' @ $real @ $real
        @ ^ [V_x: $real] :
            ( $product @ V_a @ V_x )
        @ V_cs ) ) )).

thf('.def_poly_prod_nil0_axiom',axiom,(
    ! [V_as: ( 'ListOf' @ $real )] :
      ( ( 'poly*/2' @ ( 'nil/0' @ $real ) @ V_as )
      = ( 'nil/0' @ $real ) ) )).

thf('.def_poly_prod_nil1_axiom',axiom,(
    ! [V_as: ( 'ListOf' @ $real )] :
      ( ( 'poly*/2' @ V_as @ ( 'nil/0' @ $real ) )
      = ( 'nil/0' @ $real ) ) )).

thf('.def_poly_prod_cons_axiom',axiom,(
    ! [V_a0: $real,V_as: ( 'ListOf' @ $real ),V_b0: $real,V_bs: ( 'ListOf' @ $real )] :
      ( ( 'poly*/2' @ ( 'cons/2' @ $real @ V_a0 @ V_as ) @ ( 'cons/2' @ $real @ V_b0 @ V_bs ) )
      = ( 'poly+/2' @ ( 'poly+/2' @ ( 'cons/2' @ $real @ ( $product @ V_a0 @ V_b0 ) @ ( 'nil/0' @ $real ) ) @ ( 'cons/2' @ $real @ 0.0 @ ( 'cons/2' @ $real @ 0.0 @ ( 'poly*/2' @ V_as @ V_bs ) ) ) ) @ ( 'cons/2' @ $real @ 0.0 @ ( 'poly+/2' @ ( 'poly-s*/2' @ V_a0 @ V_bs ) @ ( 'poly-s*/2' @ V_b0 @ V_as ) ) ) ) ) )).

thf('.def_poly_deg_nil_axiom',axiom,
    ( ( 'poly-deg/1' @ ( 'nil/0' @ $real ) )
    = 0 )).

thf('.def_poly_deg_cons_axiom',axiom,(
    ! [V_a: $real,V_as: ( 'ListOf' @ $real )] :
      ( ( 'poly-deg/1' @ ( 'cons/2' @ $real @ V_a @ V_as ) )
      = ( 'if/3' @ $int
        @ ^ [V__: 'Unit'] :
            ( 'all/2' @ $real
            @ ^ [V_x: $real] : ( V_x = 0.0 )
            @ V_as )
        @ 0
        @ ( $sum @ 1 @ ( 'poly-deg/1' @ V_as ) ) ) ) )).

thf('.def_poly_deriv_nil_axiom',axiom,
    ( ( 'poly-deriv/1' @ ( 'nil/0' @ $real ) )
    = ( 'nil/0' @ $real ) )).

thf('.def_poly_deriv_cons_axiom',axiom,(
    ! [V_a0: $real,V_as: ( 'ListOf' @ $real )] :
      ( ( 'poly-deriv/1' @ ( 'cons/2' @ $real @ V_a0 @ V_as ) )
      = ( 'poly+/2' @ V_as @ ( 'cons/2' @ $real @ 0.0 @ ( 'poly-deriv/1' @ V_as ) ) ) ) )).

thf('.def_poly_divisible_by_axiom',axiom,(
    ! [V_as: ( 'ListOf' @ $real ),V_bs: ( 'ListOf' @ $real )] :
      ( ( 'poly-divisible-by/2' @ V_as @ V_bs )
    <=> ? [V_quo: ( 'ListOf' @ $real )] :
          ( 'poly-divmod/4' @ V_as @ V_bs @ V_quo @ ( 'nil/0' @ $real ) ) ) )).

thf('.def_constant_term_nil_axiom',axiom,
    ( ( 'constant-term/1' @ ( 'nil/0' @ $real ) )
    = 0.0 )).

thf('.def_constant_term_cons_axiom',axiom,(
    ! [V_a0: $real,V_as: ( 'ListOf' @ $real )] :
      ( ( 'constant-term/1' @ ( 'cons/2' @ $real @ V_a0 @ V_as ) )
      = V_a0 ) )).

thf('.def_poly_funapp_axiom',axiom,(
    ! [V_cs: ( 'ListOf' @ $real ),V_x: $real] :
      ( ( 'funapp/2' @ ( 'poly-fun/1' @ V_cs ) @ V_x )
      = ( 'poly-value/2' @ V_cs @ V_x ) ) )).

thf('.def_equality_polyfun_axiom',axiom,(
    ! [V_as: ( 'ListOf' @ $real ),V_bs: ( 'ListOf' @ $real )] :
      ( ( ( 'poly-fun/1' @ V_as )
        = ( 'poly-fun/1' @ V_bs ) )
    <=> ( 'poly-equal/2' @ V_as @ V_bs ) ) )).

thf('.def_equality_polyfun_and_lambda_fun_axiom',axiom,(
    ! [V_as: ( 'ListOf' @ $real ),V_f: ( $real > $real )] :
      ( ( ( 'poly-fun/1' @ V_as )
        = ( 'fun/1' @ V_f ) )
    <=> ( ( 'fun/1'
          @ ^ [V_x: $real] :
              ( 'poly-value/2' @ V_as @ V_x ) )
        = ( 'fun/1' @ V_f ) ) ) )).

thf('.def_derivative_polynomial_axiom',axiom,(
    ! [V_as: ( 'ListOf' @ $real )] :
      ( ( 'derivative/1' @ ( 'poly-fun/1' @ V_as ) )
      = ( 'poly-fun/1' @ ( 'poly-deriv/1' @ V_as ) ) ) )).

thf('.def_integration_polynominal_axiom',axiom,(
    ! [V_as: ( 'ListOf' @ $real ),V_lo: $real,V_hi: $real] :
      ( ( 'integration/3' @ ( 'poly-fun/1' @ V_as ) @ V_lo @ V_hi )
      = ( 'integration/3'
        @ ( 'fun/1'
          @ ^ [V_x: $real] :
              ( 'poly-value/2' @ V_as @ V_x ) )
        @ V_lo
        @ V_hi ) ) )).

thf('.def_fun_plus_polynomial_axiom',axiom,(
    ! [V_as: ( 'ListOf' @ $real ),V_bs: ( 'ListOf' @ $real )] :
      ( ( 'fun+/2' @ ( 'poly-fun/1' @ V_as ) @ ( 'poly-fun/1' @ V_bs ) )
      = ( 'poly-fun/1' @ ( 'poly+/2' @ V_as @ V_bs ) ) ) )).

thf('.def_fun_minus_polynomial_axiom',axiom,(
    ! [V_as: ( 'ListOf' @ $real ),V_bs: ( 'ListOf' @ $real )] :
      ( ( 'fun-/2' @ ( 'poly-fun/1' @ V_as ) @ ( 'poly-fun/1' @ V_bs ) )
      = ( 'poly-fun/1' @ ( 'poly-/2' @ V_as @ V_bs ) ) ) )).

thf('.def_fun_scalar_prod_polynomial_axiom',axiom,(
    ! [V_a: $real,V_cs: ( 'ListOf' @ $real )] :
      ( ( 'fun-s*/2' @ V_a @ ( 'poly-fun/1' @ V_cs ) )
      = ( 'poly-fun/1' @ ( 'poly-s*/2' @ V_a @ V_cs ) ) ) )).

thf('.def_fun_prod_polynomial_axiom',axiom,(
    ! [V_as: ( 'ListOf' @ $real ),V_bs: ( 'ListOf' @ $real )] :
      ( ( 'fun*/2' @ ( 'poly-fun/1' @ V_as ) @ ( 'poly-fun/1' @ V_bs ) )
      = ( 'poly-fun/1' @ ( 'poly*/2' @ V_as @ V_bs ) ) ) )).

thf('.def_2nd_poly_funcmin_axiom',axiom,(
    ! [V_a: $real,V_b: $real,V_c: $real,V_hi: $real,V_lo: $real,V_xm: $real,V_ym: $real] :
      ( ( 'func-min/4' @ ( 'poly-fun/1' @ ( 'cons/2' @ $real @ V_c @ ( 'cons/2' @ $real @ V_b @ ( 'cons/2' @ $real @ V_a @ ( 'nil/0' @ $real ) ) ) ) ) @ ( 'range/2' @ ( 'ep-close/1' @ V_lo ) @ ( 'ep-close/1' @ V_hi ) ) @ V_xm @ V_ym )
    <=> ( ( ( $less @ 0.0 @ V_a )
          & ( ( ( 'elem/2' @ $real @ ( $uminus @ ( $quotient @ V_b @ ( $product @ 2.0 @ V_a ) ) ) @ ( 'range/2' @ ( 'ep-close/1' @ V_lo ) @ ( 'ep-close/1' @ V_hi ) ) )
              & ( V_xm
                = ( $uminus @ ( $quotient @ V_b @ ( $product @ 2.0 @ V_a ) ) ) )
              & ( V_ym
                = ( $difference @ V_c @ ( $quotient @ ( '^/2' @ V_b @ 2.0 ) @ ( $product @ 4.0 @ V_a ) ) ) ) )
            | ( ( $less @ ( $uminus @ ( $quotient @ V_b @ ( $product @ 2.0 @ V_a ) ) ) @ V_lo )
              & ( V_xm = V_lo )
              & ( V_ym
                = ( 'poly-value/2' @ ( 'cons/2' @ $real @ V_c @ ( 'cons/2' @ $real @ V_b @ ( 'cons/2' @ $real @ V_a @ ( 'nil/0' @ $real ) ) ) ) @ V_lo ) ) )
            | ( ( $less @ V_hi @ ( $uminus @ ( $quotient @ V_b @ ( $product @ 2.0 @ V_a ) ) ) )
              & ( V_xm = V_hi )
              & ( V_ym
                = ( 'poly-value/2' @ ( 'cons/2' @ $real @ V_c @ ( 'cons/2' @ $real @ V_b @ ( 'cons/2' @ $real @ V_a @ ( 'nil/0' @ $real ) ) ) ) @ V_hi ) ) ) ) )
        | ( ( ( $less @ V_a @ 0.0 )
            | ( ( V_a = 0.0 )
              & ( V_b != 0.0 ) ) )
          & ( ( ( $less @ ( 'poly-value/2' @ ( 'cons/2' @ $real @ V_c @ ( 'cons/2' @ $real @ V_b @ ( 'cons/2' @ $real @ V_a @ ( 'nil/0' @ $real ) ) ) ) @ V_lo ) @ ( 'poly-value/2' @ ( 'cons/2' @ $real @ V_c @ ( 'cons/2' @ $real @ V_b @ ( 'cons/2' @ $real @ V_a @ ( 'nil/0' @ $real ) ) ) ) @ V_hi ) )
              & ( V_xm = V_lo )
              & ( V_ym
                = ( 'poly-value/2' @ ( 'cons/2' @ $real @ V_c @ ( 'cons/2' @ $real @ V_b @ ( 'cons/2' @ $real @ V_a @ ( 'nil/0' @ $real ) ) ) ) @ V_lo ) ) )
            | ( ( $lesseq @ ( 'poly-value/2' @ ( 'cons/2' @ $real @ V_c @ ( 'cons/2' @ $real @ V_b @ ( 'cons/2' @ $real @ V_a @ ( 'nil/0' @ $real ) ) ) ) @ V_hi ) @ ( 'poly-value/2' @ ( 'cons/2' @ $real @ V_c @ ( 'cons/2' @ $real @ V_b @ ( 'cons/2' @ $real @ V_a @ ( 'nil/0' @ $real ) ) ) ) @ V_lo ) )
              & ( V_xm = V_hi )
              & ( V_ym
                = ( 'poly-value/2' @ ( 'cons/2' @ $real @ V_c @ ( 'cons/2' @ $real @ V_b @ ( 'cons/2' @ $real @ V_a @ ( 'nil/0' @ $real ) ) ) ) @ V_hi ) ) ) ) ) ) ) )).

thf('.def_2nd_poly_funcmax_axiom',axiom,(
    ! [V_a: $real,V_b: $real,V_c: $real,V_hi: $real,V_lo: $real,V_xM: $real,V_yM: $real] :
      ( ( 'func-max/4' @ ( 'poly-fun/1' @ ( 'cons/2' @ $real @ V_c @ ( 'cons/2' @ $real @ V_b @ ( 'cons/2' @ $real @ V_a @ ( 'nil/0' @ $real ) ) ) ) ) @ ( 'range/2' @ ( 'ep-close/1' @ V_lo ) @ ( 'ep-close/1' @ V_hi ) ) @ V_xM @ V_yM )
    <=> ? [V_ym: $real] :
          ( ( 'func-min/4' @ ( 'poly-fun/1' @ ( 'cons/2' @ $real @ ( $uminus @ V_c ) @ ( 'cons/2' @ $real @ ( $uminus @ V_b ) @ ( 'cons/2' @ $real @ ( $uminus @ V_a ) @ ( 'nil/0' @ $real ) ) ) ) ) @ ( 'range/2' @ ( 'ep-close/1' @ V_lo ) @ ( 'ep-close/1' @ V_hi ) ) @ V_xM @ V_ym )
          & ( V_yM
            = ( $uminus @ V_ym ) ) ) ) )).

thf('.def_other_poly_funcmin_axiom',axiom,(
    ! [V_as: ( 'ListOf' @ $real ),V_range: ( 'SetOf' @ $real ),V_xm: $real,V_ym: $real] :
      ( ( 'func-min/4' @ ( 'poly-fun/1' @ V_as ) @ V_range @ V_xm @ V_ym )
    <=> ( 'func-min/4'
        @ ( 'fun/1'
          @ ^ [V_x: $real] :
              ( 'poly-value/2' @ V_as @ V_x ) )
        @ V_range
        @ V_xm
        @ V_ym ) ) )).

thf('.def_other_poly_funcmax_axiom',axiom,(
    ! [V_as: ( 'ListOf' @ $real ),V_range: ( 'SetOf' @ $real ),V_xm: $real,V_ym: $real] :
      ( ( 'func-max/4' @ ( 'poly-fun/1' @ V_as ) @ V_range @ V_xm @ V_ym )
    <=> ( 'func-max/4'
        @ ( 'fun/1'
          @ ^ [V_x: $real] :
              ( 'poly-value/2' @ V_as @ V_x ) )
        @ V_range
        @ V_xm
        @ V_ym ) ) )).

thf('.def_other_poly_funcmin_no_domain_restriction_axiom',axiom,(
    ! [V_as: ( 'ListOf' @ $real ),V_xm: $real,V_ym: $real] :
      ( ( 'func-min/3' @ ( 'poly-fun/1' @ V_as ) @ V_xm @ V_ym )
    <=> ( 'func-min/3'
        @ ( 'fun/1'
          @ ^ [V_x: $real] :
              ( 'poly-value/2' @ V_as @ V_x ) )
        @ V_xm
        @ V_ym ) ) )).

thf('.def_other_poly_funcmax_no_domain_restriction_axiom',axiom,(
    ! [V_as: ( 'ListOf' @ $real ),V_xm: $real,V_ym: $real] :
      ( ( 'func-max/3' @ ( 'poly-fun/1' @ V_as ) @ V_xm @ V_ym )
    <=> ( 'func-max/3'
        @ ( 'fun/1'
          @ ^ [V_x: $real] :
              ( 'poly-value/2' @ V_as @ V_x ) )
        @ V_xm
        @ V_ym ) ) )).

thf('.def_is_fun_deg_of_axiom',axiom,(
    ! [V_n: $int,V_as: ( 'ListOf' @ $real )] :
      ( ( 'is-fun-deg-of/2' @ V_n @ ( 'poly-fun/1' @ V_as ) )
    <=> ( V_n
        = ( 'poly-deg/1' @ V_as ) ) ) )).

thf('.def_is_fun_deg_of_1st_axiom',axiom,(
    ! [V_f: 'R2R'] :
      ( ( 'is-fun-deg-of/2' @ 1 @ V_f )
    <=> ? [V_a: $real,V_b: $real] :
          ( ( V_a != 0.0 )
          & ( V_f
            = ( 'poly-fun/1' @ ( 'cons/2' @ $real @ V_b @ ( 'cons/2' @ $real @ V_a @ ( 'nil/0' @ $real ) ) ) ) ) ) ) )).

thf('.def_is_fun_deg_of_2nd_axiom',axiom,(
    ! [V_f: 'R2R'] :
      ( ( 'is-fun-deg-of/2' @ 2 @ V_f )
    <=> ? [V_a: $real,V_b: $real,V_c: $real] :
          ( ( V_a != 0.0 )
          & ( V_f
            = ( 'poly-fun/1' @ ( 'cons/2' @ $real @ V_c @ ( 'cons/2' @ $real @ V_b @ ( 'cons/2' @ $real @ V_a @ ( 'nil/0' @ $real ) ) ) ) ) ) ) ) )).

thf('.def_is_fun_deg_of_3rd_axiom',axiom,(
    ! [V_f: 'R2R'] :
      ( ( 'is-fun-deg-of/2' @ 3 @ V_f )
    <=> ? [V_a: $real,V_b: $real,V_c: $real,V_d: $real] :
          ( ( V_a != 0.0 )
          & ( V_f
            = ( 'poly-fun/1' @ ( 'cons/2' @ $real @ V_d @ ( 'cons/2' @ $real @ V_c @ ( 'cons/2' @ $real @ V_b @ ( 'cons/2' @ $real @ V_a @ ( 'nil/0' @ $real ) ) ) ) ) ) ) ) ) )).

thf('.def-fun-deg_axiom',axiom,(
    ! [V_cs: ( 'ListOf' @ $real )] :
      ( ( 'func-deg/1' @ ( 'poly-fun/1' @ V_cs ) )
      = ( 'poly-deg/1' @ V_cs ) ) )).

thf('.def-fun-coefficients-of_axiom',axiom,(
    ! [V_cs: ( 'ListOf' @ $real )] :
      ( ( 'func-coefficients-of/1' @ ( 'poly-fun/1' @ V_cs ) )
      = V_cs ) )).

thf('.def_is_polynomial_axiom',axiom,(
    ! [V_p: 'Polynomial'] :
      ( 'is-polynomial/1' @ V_p ) )).

thf('.def_polynomial_equality_axiom',axiom,(
    ! [V_cs1: ( 'ListOf' @ $real ),V_cs2: ( 'ListOf' @ $real )] :
      ( ( ( 'polynomial/1' @ V_cs1 )
        = ( 'polynomial/1' @ V_cs2 ) )
    <=> ( 'poly-equal/2' @ V_cs1 @ V_cs2 ) ) )).

thf('.def_polynomial+_axiom',axiom,(
    ! [V_cs1: ( 'ListOf' @ $real ),V_cs2: ( 'ListOf' @ $real )] :
      ( ( 'polynomial+/2' @ ( 'polynomial/1' @ V_cs1 ) @ ( 'polynomial/1' @ V_cs2 ) )
      = ( 'polynomial/1' @ ( 'poly+/2' @ V_cs1 @ V_cs2 ) ) ) )).

thf('.def_polynomial-_axiom',axiom,(
    ! [V_cs1: ( 'ListOf' @ $real ),V_cs2: ( 'ListOf' @ $real )] :
      ( ( 'polynomial-/2' @ ( 'polynomial/1' @ V_cs1 ) @ ( 'polynomial/1' @ V_cs2 ) )
      = ( 'polynomial/1' @ ( 'poly-/2' @ V_cs1 @ V_cs2 ) ) ) )).

thf('.def_polynomial-s*_axiom',axiom,(
    ! [V_s: $real,V_cs: ( 'ListOf' @ $real )] :
      ( ( 'polynomial-s*/2' @ V_s @ ( 'polynomial/1' @ V_cs ) )
      = ( 'polynomial/1' @ ( 'poly-s*/2' @ V_s @ V_cs ) ) ) )).

thf('.def_polynomial*_axiom',axiom,(
    ! [V_cs1: ( 'ListOf' @ $real ),V_cs2: ( 'ListOf' @ $real )] :
      ( ( 'polynomial*/2' @ ( 'polynomial/1' @ V_cs1 ) @ ( 'polynomial/1' @ V_cs2 ) )
      = ( 'polynomial/1' @ ( 'poly*/2' @ V_cs1 @ V_cs2 ) ) ) )).

thf('.def_polynomial^_axiom',axiom,(
    ! [V_cs: ( 'ListOf' @ $real ),V_n: $int] :
      ( ( 'polynomial^/2' @ ( 'polynomial/1' @ V_cs ) @ V_n )
      = ( 'polynomial/1' @ ( 'poly^/2' @ V_cs @ V_n ) ) ) )).

thf('.def_polynomial-div_axiom',axiom,(
    ! [V_cs1: ( 'ListOf' @ $real ),V_cs2: ( 'ListOf' @ $real )] :
      ( ( 'polynomial-div/2' @ ( 'polynomial/1' @ V_cs1 ) @ ( 'polynomial/1' @ V_cs2 ) )
      = ( 'polynomial/1' @ ( 'poly-div/2' @ V_cs1 @ V_cs2 ) ) ) )).

thf('.def_polynomial-mod_axiom',axiom,(
    ! [V_cs1: ( 'ListOf' @ $real ),V_cs2: ( 'ListOf' @ $real )] :
      ( ( 'polynomial-mod/2' @ ( 'polynomial/1' @ V_cs1 ) @ ( 'polynomial/1' @ V_cs2 ) )
      = ( 'polynomial/1' @ ( 'poly-mod/2' @ V_cs1 @ V_cs2 ) ) ) )).

thf('.def_polynomial-divmod_axiom',axiom,(
    ! [V_cs1: ( 'ListOf' @ $real ),V_cs2: ( 'ListOf' @ $real ),V_quo_cs: ( 'ListOf' @ $real ),V_rem_cs: ( 'ListOf' @ $real )] :
      ( ( 'polynomial-divmod/4' @ ( 'polynomial/1' @ V_cs1 ) @ ( 'polynomial/1' @ V_cs2 ) @ ( 'polynomial/1' @ V_quo_cs ) @ ( 'polynomial/1' @ V_rem_cs ) )
    <=> ( 'poly-divmod/4' @ V_cs1 @ V_cs2 @ V_quo_cs @ V_rem_cs ) ) )).

thf('.def_polynomial-divisible-by_axiom',axiom,(
    ! [V_cs1: ( 'ListOf' @ $real ),V_cs2: ( 'ListOf' @ $real )] :
      ( ( 'polynomial-divisible-by/2' @ ( 'polynomial/1' @ V_cs1 ) @ ( 'polynomial/1' @ V_cs2 ) )
    <=> ( 'poly-divisible-by/2' @ V_cs1 @ V_cs2 ) ) )).

thf('.def_polynomial-value_axiom',axiom,(
    ! [V_cs: ( 'ListOf' @ $real ),V_r: $real] :
      ( ( 'polynomial-value/2' @ ( 'polynomial/1' @ V_cs ) @ V_r )
      = ( 'poly-value/2' @ V_cs @ V_r ) ) )).

thf('.def_polynomial-deg_axiom',axiom,(
    ! [V_cs: ( 'ListOf' @ $real )] :
      ( ( 'polynomial-deg/1' @ ( 'polynomial/1' @ V_cs ) )
      = ( 'poly-deg/1' @ V_cs ) ) )).

thf('.def_polynomial-sum_nil_axiom',axiom,
    ( ( 'polynomial-sum/1' @ ( 'nil/0' @ 'Polynomial' ) )
    = ( 'polynomial/1' @ ( 'nil/0' @ $real ) ) )).

thf('.def_polynomial-sum_cons_axiom',axiom,(
    ! [V_p: 'Polynomial',V_ps: ( 'ListOf' @ 'Polynomial' )] :
      ( ( 'polynomial-sum/1' @ ( 'cons/2' @ 'Polynomial' @ V_p @ V_ps ) )
      = ( 'polynomial+/2' @ V_p @ ( 'polynomial-sum/1' @ V_ps ) ) ) )).

thf('.def_polynomial-product_nil_axiom',axiom,
    ( ( 'polynomial-product/1' @ ( 'nil/0' @ 'Polynomial' ) )
    = ( 'polynomial/1' @ ( 'cons/2' @ $real @ 1.0 @ ( 'nil/0' @ $real ) ) ) )).

thf('.def_polynomial-product_cons_axiom',axiom,(
    ! [V_p: 'Polynomial',V_ps: ( 'ListOf' @ 'Polynomial' )] :
      ( ( 'polynomial-product/1' @ ( 'cons/2' @ 'Polynomial' @ V_p @ V_ps ) )
      = ( 'polynomial*/2' @ V_p @ ( 'polynomial-product/1' @ V_ps ) ) ) )).

thf('.def_poly2list_axiom',axiom,(
    ! [V_lis: ( 'ListOf' @ $real )] :
      ( ( 'poly2list/1' @ ( 'polynomial/1' @ V_lis ) )
      = V_lis ) )).

thf('.def_polynomial_quotient_axiom',axiom,(
    ! [V_f: 'Polynomial',V_g: 'Polynomial'] :
      ( ( 'polynomial-quot-of/1' @ ( 'polynomial-division/2' @ V_f @ V_g ) )
      = ( 'polynomial-div/2' @ V_f @ V_g ) ) )).

thf('.def_polynomial_remainder_axiom',axiom,(
    ! [V_f: 'Polynomial',V_g: 'Polynomial'] :
      ( ( 'polynomial-rem-of/1' @ ( 'polynomial-division/2' @ V_f @ V_g ) )
      = ( 'polynomial-mod/2' @ V_f @ V_g ) ) )).

thf('.def_polynomial_coeff_list_nil_axiom',axiom,
    ( ( 'polynomial-coefficients-of/1' @ ( 'polynomial/1' @ ( 'nil/0' @ $real ) ) )
    = ( 'cons/2' @ $real @ 0.0 @ ( 'nil/0' @ $real ) ) )).

thf('.def_polynomial_coeff_list_cons_axiom',axiom,(
    ! [V_c: $real,V_cs: ( 'ListOf' @ $real )] :
      ( ( 'polynomial-coefficients-of/1' @ ( 'polynomial/1' @ ( 'cons/2' @ $real @ V_c @ V_cs ) ) )
      = ( 'cons/2' @ $real @ V_c @ V_cs ) ) )).

thf('.def-is-multiple-root-of-poly-eq_axiom',axiom,(
    ! [V_s: $real,V_cs: ( 'ListOf' @ $real )] :
      ( ( 'is-multiple-root-of/2' @ V_s @ ( 'poly-equation/1' @ V_cs ) )
    <=> ( 'poly-divisible-by/2' @ V_cs @ ( 'poly^/2' @ ( 'cons/2' @ $real @ ( $uminus @ V_s ) @ ( 'cons/2' @ $real @ 1.0 @ ( 'nil/0' @ $real ) ) ) @ 2 ) ) ) )).

thf('.def-is-n-multiple-root-of-poly-eq_axiom',axiom,(
    ! [V_n: $int,V_s: $real,V_cs: ( 'ListOf' @ $real )] :
      ( ( 'is-n-multiple-root-of/3' @ V_n @ V_s @ ( 'poly-equation/1' @ V_cs ) )
    <=> ( 'poly-divisible-by/2' @ V_cs @ ( 'poly^/2' @ ( 'cons/2' @ $real @ ( $uminus @ V_s ) @ ( 'cons/2' @ $real @ 1.0 @ ( 'nil/0' @ $real ) ) ) @ V_n ) ) ) )).

thf('.def-equation-coefficients-of_axiom',axiom,(
    ! [V_cs: ( 'ListOf' @ $real )] :
      ( ( 'equation-coefficients-of/1' @ ( 'poly-equation/1' @ V_cs ) )
      = V_cs ) )).

thf('.def-equation-deg_axiom',axiom,(
    ! [V_cs: ( 'ListOf' @ $real )] :
      ( ( 'equation-deg/1' @ ( 'poly-equation/1' @ V_cs ) )
      = ( 'poly-deg/1' @ V_cs ) ) )).

%------------------------------------------------------------------------------
%
%----2D Geometry
%
%------------------------------------------------------------------------------
%;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
%----Plane Geometry
%;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
thf('2d.Point_type',type,(
    '2d.Point': $tType )).

%----shapes in R^2 or R^3 or C
thf('2d.Shape_type',type,(
    '2d.Shape': $tType )).

%----angles of the shape angle(A,B,C)
thf('2d.Angle_type',type,(
    '2d.Angle': $tType )).

thf('2d.Vector_type',type,(
    '2d.Vector': $tType )).

%----trivially true for any Shape
thf('2d.is-shape/1_type',type,(
    '2d.is-shape/1': '2d.Shape' > $o )).

thf('2d.coordinate-list-of/1_type',type,(
    '2d.coordinate-list-of/1': '2d.Point' > ( 'ListOf' @ $real ) )).

%----equidistant(A,B,C) <-> the lengths AC and BC are equal
thf('2d.equidistant/3_type',type,(
    '2d.equidistant/3': '2d.Point' > '2d.Point' > '2d.Point' > $o )).

%----equidistant(list, A) <-> all the distances between members of list and A are equal
thf('2d.equidistant/2_type',type,(
    '2d.equidistant/2': ( 'ListOf' @ '2d.Point' ) > '2d.Point' > $o )).

%-------------------------------------------------------------------------------
%----Vectors & Matrices
%-------------------------------------------------------------------------------
%----Matrices
thf('2d.Matrix_type',type,(
    '2d.Matrix': $tType )).

%----trivially true for any vectors
thf('2d.is-vector/1_type',type,(
    '2d.is-vector/1': '2d.Vector' > $o )).

%----zero vector
thf('2d.zero-vector/0_type',type,(
    '2d.zero-vector/0': '2d.Vector' )).

%----component-list-of(v) = the list of the x- and y- (and z-) components of v
thf('2d.component-list-of/1_type',type,(
    '2d.component-list-of/1': '2d.Vector' > ( 'ListOf' @ $real ) )).

%----vec(A,B) = the vector from A to B
thf('2d.vec/2_type',type,(
    '2d.vec/2': '2d.Point' > '2d.Point' > '2d.Vector' )).

%----vec->point(v) = the vector (x,y) is translated to the point (x,y)
thf('2d.vec->point/1_type',type,(
    '2d.vec->point/1': '2d.Vector' > '2d.Point' )).

%----v+(u,v) = the sum of vectors u and v
thf('2d.v+/2_type',type,(
    '2d.v+/2': '2d.Vector' > '2d.Vector' > '2d.Vector' )).

%----vec-translate(p,v) = 
thf('2d.vec-translate/2_type',type,(
    '2d.vec-translate/2': '2d.Point' > '2d.Vector' > '2d.Point' )).

%----v-sum(list) = the sum of vectors in list
thf('2d.v-sum/1_type',type,(
    '2d.v-sum/1': ( 'ListOf' @ '2d.Vector' ) > '2d.Vector' )).

%----v-(u) = -1 * u
thf('2d.v-/1_type',type,(
    '2d.v-/1': '2d.Vector' > '2d.Vector' )).

%----v-(u,v) = the difference of vectors u and v
thf('2d.v-/2_type',type,(
    '2d.v-/2': '2d.Vector' > '2d.Vector' > '2d.Vector' )).

%----sv*(a,v) = the scalar product of a and vector v
thf('2d.sv*/2_type',type,(
    '2d.sv*/2': $real > '2d.Vector' > '2d.Vector' )).

%----inner-prod(u,v) = the inner product of u and v
thf('2d.inner-prod/2_type',type,(
    '2d.inner-prod/2': '2d.Vector' > '2d.Vector' > $real )).

%----angle-of-vectors(u,v) = the formed angle of u and v
thf('2d.angle-of-vectors/2_type',type,(
    '2d.angle-of-vectors/2': '2d.Vector' > '2d.Vector' > '2d.Angle' )).

%----vec-perpendicular(u,v) <-> vectors u and v are perpendicular
thf('2d.vec-perpendicular/2_type',type,(
    '2d.vec-perpendicular/2': '2d.Vector' > '2d.Vector' > $o )).

%----vec-parallel(u,v) <-> vectors u and v are parallel
thf('2d.vec-parallel/2_type',type,(
    '2d.vec-parallel/2': '2d.Vector' > '2d.Vector' > $o )).

%----vec-same-direction(u,v) <-> vectors u and v have the same direction i.e. u and v are parallel and their inner product is positive
thf('2d.vec-same-direction/2_type',type,(
    '2d.vec-same-direction/2': '2d.Vector' > '2d.Vector' > $o )).

%----vec-opp-direction(u,v) <-> vectors u and v have the opposite direction i.e. u and v are parallel and their inner product is negative
thf('2d.vec-opp-direction/2_type',type,(
    '2d.vec-opp-direction/2': '2d.Vector' > '2d.Vector' > $o )).

%----is-unit-vec(v) <-> the magnitude of v is 1
thf('2d.is-unit-vec/1_type',type,(
    '2d.is-unit-vec/1': '2d.Vector' > $o )).

%----normalize(v) <-> the vector of the magnitude 1 and of the same direction
thf('2d.normalize/1_type',type,(
    '2d.normalize/1': '2d.Vector' > '2d.Vector' )).

%----m+(u,v) = the sum of matrices u and v
thf('2d.m+/2_type',type,(
    '2d.m+/2': '2d.Matrix' > '2d.Matrix' > '2d.Matrix' )).

%----m-sum(list) = the sum of matrices in list
thf('2d.m-sum/1_type',type,(
    '2d.m-sum/1': ( 'ListOf' @ '2d.Matrix' ) > '2d.Matrix' )).

%----m-(A,B) = the difference of matrices A and B
thf('2d.m-/2_type',type,(
    '2d.m-/2': '2d.Matrix' > '2d.Matrix' > '2d.Matrix' )).

%----m-(A) = the negation of matrix A
thf('2d.m-/1_type',type,(
    '2d.m-/1': '2d.Matrix' > '2d.Matrix' )).

%----sm*(a,A) = the scalar product of a and matrix A
thf('2d.sm*/2_type',type,(
    '2d.sm*/2': $real > '2d.Matrix' > '2d.Matrix' )).

%----m*(A,B) = the product of a and matrices A and B
thf('2d.m*/2_type',type,(
    '2d.m*/2': '2d.Matrix' > '2d.Matrix' > '2d.Matrix' )).

%----m-prod(list) = the product of matrices in list
thf('2d.m-prod/1_type',type,(
    '2d.m-prod/1': ( 'ListOf' @ '2d.Matrix' ) > '2d.Matrix' )).

%----mv*(A,v) = the product of matrix A and vector v
thf('2d.mv*/2_type',type,(
    '2d.mv*/2': '2d.Matrix' > '2d.Vector' > '2d.Vector' )).

%----m^(A,n) = the power of matrix A to n
thf('2d.m^/2_type',type,(
    '2d.m^/2': '2d.Matrix' > $int > '2d.Matrix' )).

%----identity-matrix() = the identity matrix
thf('2d.identity-matrix/0_type',type,(
    '2d.identity-matrix/0': '2d.Matrix' )).

%----zero-matrix() = the zero matrix
thf('2d.zero-matrix/0_type',type,(
    '2d.zero-matrix/0': '2d.Matrix' )).

%----det(A) = the determinant of matrix A
thf('2d.det/1_type',type,(
    '2d.det/1': '2d.Matrix' > $real )).

%----mat-shape*(A, shape) = the image of linear map A of shape
thf('2d.mat-shape*/2_type',type,(
    '2d.mat-shape*/2': '2d.Matrix' > '2d.Shape' > '2d.Shape' )).

%----is-non-singular(A) = A is a regular matrix
thf('2d.is-non-singular/1_type',type,(
    '2d.is-non-singular/1': '2d.Matrix' > $o )).

%----inverse-of(A) = the inverse matrix of A
%----works correctly for only regular matrices
thf('2d.inverse-of/1_type',type,(
    '2d.inverse-of/1': '2d.Matrix' > '2d.Matrix' )).

%----is-inverse-of(A,B) <-> B is the inverse matrix of A
thf('2d.is-inverse-of/2_type',type,(
    '2d.is-inverse-of/2': '2d.Matrix' > '2d.Matrix' > $o )).

%----trivially true for any Matrix
thf('2d.is-matrix/1_type',type,(
    '2d.is-matrix/1': '2d.Matrix' > $o )).

%----transposed-matrix(A) = the transposed matrix of A
thf('2d.transposed-matrix/1_type',type,(
    '2d.transposed-matrix/1': '2d.Matrix' > '2d.Matrix' )).

%----is-orthogonal-matrix(A) <-> A is an orthogonal matrix
thf('2d.is-orthogonal-matrix/1_type',type,(
    '2d.is-orthogonal-matrix/1': '2d.Matrix' > $o )).

%-------------------------------------------------------------------------------
%----Angle
%-------------------------------------------------------------------------------
%----angle constructor
thf('2d.angle/3_type',type,(
    '2d.angle/3': '2d.Point' > '2d.Point' > '2d.Point' > '2d.Angle' )).

%----non-degenerated condition:
%----(angle-type (angle P Q R)) <=> P != Q & Q != R
thf('2d.angle-type/1_type',type,(
    '2d.angle-type/1': '2d.Angle' > $o )).

%----cos-of-angle(a) = the cosine of the degree of a
thf('2d.cos-of-angle/1_type',type,(
    '2d.cos-of-angle/1': '2d.Angle' > $real )).

%----sin-of-angle(a) = the sine of the degree of a
thf('2d.sin-of-angle/1_type',type,(
    '2d.sin-of-angle/1': '2d.Angle' > $real )).

%----tan-of-angle(a) = the tangent of the degree of a
thf('2d.tan-of-angle/1_type',type,(
    '2d.tan-of-angle/1': '2d.Angle' > $real )).

%----rad-of-angle(a) = degree of a in radian
thf('2d.rad-of-angle/1_type',type,(
    '2d.rad-of-angle/1': '2d.Angle' > $real )).

%----formed-angle-of(shape1,shape2) = the formed angle of shape1 and shape2
thf('2d.formed-angle-of/2_type',type,(
    '2d.formed-angle-of/2': '2d.Shape' > '2d.Shape' > '2d.Angle' )).

%----same-angle(a,b) = the degrees of a and b are the same
%----remark: angle(a,b,c) = angle(A,B,C) <-> a=A, b=B, and c=C
thf('2d.same-angle/2_type',type,(
    '2d.same-angle/2': '2d.Angle' > '2d.Angle' > $o )).

%----is-right(a) = a is the right angle
thf('2d.is-right/1_type',type,(
    '2d.is-right/1': '2d.Angle' > $o )).

%----is-acute(a) = a is an acute angle
thf('2d.is-acute/1_type',type,(
    '2d.is-acute/1': '2d.Angle' > $o )).

%----is-obtuse(a) = a is an obtuse angle
thf('2d.is-obtuse/1_type',type,(
    '2d.is-obtuse/1': '2d.Angle' > $o )).

%----trivially true for any Angle
thf('2d.is-angle/1_type',type,(
    '2d.is-angle/1': '2d.Angle' > $o )).

%----is-interior-angle(a,shape) <-> a is an interior angle of shape
%----effective only if shape is a triangle or a square
thf('2d.is-interior-angle/2_type',type,(
    '2d.is-interior-angle/2': '2d.Angle' > '2d.Shape' > $o )).

%----are-interior-angles(angles,shape) <-> angles are the interior angles of shape
thf('2d.are-interior-angles/2_type',type,(
    '2d.are-interior-angles/2': ( 'ListOf' @ '2d.Angle' ) > '2d.Shape' > $o )).

%----is-angle-bisector(line, a) <-> line is the angle bisector of a
thf('2d.is-angle-bisector/2_type',type,(
    '2d.is-angle-bisector/2': '2d.Shape' > '2d.Angle' > $o )).

%----is-normal-vector-of(v,shape) <-> v is a normal vector of shape
%----effective only if shape is a line or a plane
thf('2d.is-normal-vector-of/2_type',type,(
    '2d.is-normal-vector-of/2': '2d.Vector' > '2d.Shape' > $o )).

%----normal-vector-of(shape) = a normal vector of shape
%----effective only if shape is a plane
thf('2d.normal-vector-of/1_type',type,(
    '2d.normal-vector-of/1': '2d.Shape' > '2d.Vector' )).

%----normal-vector-to(shape, p) = the normal vector of shape from a point on shape to p
%----effective only if shape is a line or a plane
thf('2d.normal-vector-to/2_type',type,(
    '2d.normal-vector-to/2': '2d.Shape' > '2d.Point' > '2d.Vector' )).

%----lines-intersect-at(list, p) <-> p is on all lines in list
thf('2d.lines-intersect-at/2_type',type,(
    '2d.lines-intersect-at/2': ( 'ListOf' @ '2d.Shape' ) > '2d.Point' > $o )).

%----lines-intersect-at-one(list) <-> there is a point on all lines in list
thf('2d.lines-intersect-at-one/1_type',type,(
    '2d.lines-intersect-at-one/1': ( 'ListOf' @ '2d.Shape' ) > $o )).

%----is-diameter-of(seg,shape) <-> seg is a diameter of shape
%----effective only if shape is a circle, a disk, or a sphere
thf('2d.is-diameter-of/2_type',type,(
    '2d.is-diameter-of/2': '2d.Shape' > '2d.Shape' > $o )).

%----direction-vec(line) = a direction vector of line
thf('2d.direction-vec/1_type',type,(
    '2d.direction-vec/1': '2d.Shape' > '2d.Vector' )).

%----is-perp-bisector(line,seg) <-> line is an perpendicular bisector of seg
thf('2d.is-perp-bisector/2_type',type,(
    '2d.is-perp-bisector/2': '2d.Shape' > '2d.Shape' > $o )).

%----divided-region-including(shape, p) = the region divided by shape including p
%----effective only if shape is a line or a plane
thf('2d.divided-region-including/2_type',type,(
    '2d.divided-region-including/2': '2d.Shape' > '2d.Point' > '2d.Shape' )).

%----exterior-angle-of(angle(A,B,C)) = an exterior angle of angle ABC
thf('2d.exterior-angle-of/1_type',type,(
    '2d.exterior-angle-of/1': '2d.Angle' > '2d.Angle' )).

%----is-vertex-of(p, shape) <-> p is a vertex of shape
thf('2d.is-vertex-of/2_type',type,(
    '2d.is-vertex-of/2': '2d.Point' > '2d.Shape' > $o )).

%----are-vertices-of(list,shape) <-> list enumerates all vertices of shape
thf('2d.are-vertices-of/2_type',type,(
    '2d.are-vertices-of/2': ( 'ListOf' @ '2d.Point' ) > '2d.Shape' > $o )).

%----triangle-opposite(T,p,s) <-> vertex p is opposite from side s in triangle T
thf('2d.triangle-opposite/3_type',type,(
    '2d.triangle-opposite/3': '2d.Shape' > '2d.Point' > '2d.Shape' > $o )).

%----triangle-opposite-angle(T,a,s) <-> angle a is opposite from side s in triangle T
thf('2d.triangle-opposite-angle/3_type',type,(
    '2d.triangle-opposite-angle/3': '2d.Shape' > '2d.Angle' > '2d.Shape' > $o )).

%----is-incenter-of(p,T) <-> p is the incenter of triangle T
thf('2d.is-incenter-of/2_type',type,(
    '2d.is-incenter-of/2': '2d.Point' > '2d.Shape' > $o )).

%----is-circumcenter-of(p,T) <-> p is the circumcenter of triangle T
thf('2d.is-circumcenter-of/2_type',type,(
    '2d.is-circumcenter-of/2': '2d.Point' > '2d.Shape' > $o )).

%----is-orthocenter-of(p,T) <-> p is the orthocenter of triangle T
thf('2d.is-orthocenter-of/2_type',type,(
    '2d.is-orthocenter-of/2': '2d.Point' > '2d.Shape' > $o )).

%----is-center-of-gravity-of(p,T) <-> p is the center of gravity of triangle T
thf('2d.is-center-of-gravity-of/2_type',type,(
    '2d.is-center-of-gravity-of/2': '2d.Point' > '2d.Shape' > $o )).

%----is-diagonal-of(seg,S) <-> seg is a diagonal of square S
thf('2d.is-diagonal-of/2_type',type,(
    '2d.is-diagonal-of/2': '2d.Shape' > '2d.Shape' > $o )).

%----square-opposite-side(S,s1,s2) <-> side s1 is opposite from side s2 in square S
thf('2d.square-opposite-side/3_type',type,(
    '2d.square-opposite-side/3': '2d.Shape' > '2d.Shape' > '2d.Shape' > $o )).

%----square-opposite-angle(S,a1,a2) <-> angle a1 is opposite from angle a2 in square S
thf('2d.square-opposite-angle/3_type',type,(
    '2d.square-opposite-angle/3': '2d.Shape' > '2d.Angle' > '2d.Angle' > $o )).

%----arc(c,p,q) = the arc of which center is c, and initial point p, and end point q
%----effective only if the lengths cp and cq are equal
%----arc(c,p,q) represents the minor arc pq by default
thf('2d.arc/3_type',type,(
    '2d.arc/3': '2d.Point' > '2d.Point' > '2d.Point' > '2d.Shape' )).

%----major-arc(arc(c,p,q)) = the major arc of which center is c, and initial point p, and end point q
%----effective only if the lengths cp and cq are equal
thf('2d.major-arc/1_type',type,(
    '2d.major-arc/1': '2d.Shape' > '2d.Shape' )).

%----minor-arc(arc(c,p,q)) = the minor arc of which center is c, and initial point p, and end point q
%----effective only if the lengths cp and cq are equal
thf('2d.minor-arc/1_type',type,(
    '2d.minor-arc/1': '2d.Shape' > '2d.Shape' )).

%----arc-ini-point(arc) = the initial point of arc
thf('2d.arc-ini-point/1_type',type,(
    '2d.arc-ini-point/1': '2d.Shape' > '2d.Point' )).

%----arc-end-point(arc) = the end point of arc
thf('2d.arc-end-point/1_type',type,(
    '2d.arc-end-point/1': '2d.Shape' > '2d.Point' )).

%----is-arc-node(p,arc) <-> p is either the initial point or the end point of arc
thf('2d.is-arc-node/2_type',type,(
    '2d.is-arc-node/2': '2d.Point' > '2d.Shape' > $o )).

%----chord-of-arc(arc) = the chord of arc
thf('2d.chord-of-arc/1_type',type,(
    '2d.chord-of-arc/1': '2d.Shape' > '2d.Shape' )).

%----arc-central-angle(arc) = the central angle of arc
thf('2d.arc-central-angle/1_type',type,(
    '2d.arc-central-angle/1': '2d.Shape' > $real )).

%----arc-inscribed-angle(arc) = the inscribed angle of arc
thf('2d.arc-inscribed-angle/1_type',type,(
    '2d.arc-inscribed-angle/1': '2d.Shape' > $real )).

%----circular-sector-ini-point(sector) = the initial point of sector
thf('2d.circular-sector-ini-point/1_type',type,(
    '2d.circular-sector-ini-point/1': '2d.Shape' > '2d.Point' )).

%----circular-sector-end-point(sector) = the end point of sector
thf('2d.circular-sector-end-point/1_type',type,(
    '2d.circular-sector-end-point/1': '2d.Shape' > '2d.Point' )).

%----is-circular-sector-node(sector) = p is either the initial point or the end point of sector
thf('2d.is-circular-sector-node/2_type',type,(
    '2d.is-circular-sector-node/2': '2d.Point' > '2d.Shape' > $o )).

%----chord-of-circular-sector(sector) = the chord of sector
thf('2d.chord-of-circular-sector/1_type',type,(
    '2d.chord-of-circular-sector/1': '2d.Shape' > '2d.Shape' )).

%----circular-sector-central-angle(sector) = the central angle of sector
thf('2d.circular-sector-central-angle/1_type',type,(
    '2d.circular-sector-central-angle/1': '2d.Shape' > $real )).

%----circular-sector-inscribed-angle(sector) = the inscribed angle of arc
thf('2d.circular-sector-inscribed-angle/1_type',type,(
    '2d.circular-sector-inscribed-angle/1': '2d.Shape' > $real )).

%----arc-of(s) = the arc of circular sector s
thf('2d.arc-of/1_type',type,(
    '2d.arc-of/1': '2d.Shape' > '2d.Shape' )).

%----line(p,q) = the line passing through p and q
thf('2d.line/2_type',type,(
    '2d.line/2': '2d.Point' > '2d.Point' > '2d.Shape' )).

%----seg(p,q) = the segment from p to q
thf('2d.seg/2_type',type,(
    '2d.seg/2': '2d.Point' > '2d.Point' > '2d.Shape' )).

%----half-line(p,q) = the half line from p passing through q
thf('2d.half-line/2_type',type,(
    '2d.half-line/2': '2d.Point' > '2d.Point' > '2d.Shape' )).

%----triangle(a,b,c) = triangle abc
thf('2d.triangle/3_type',type,(
    '2d.triangle/3': '2d.Point' > '2d.Point' > '2d.Point' > '2d.Shape' )).

%----square(a,b,c,d) = square abcd
thf('2d.square/4_type',type,(
    '2d.square/4': '2d.Point' > '2d.Point' > '2d.Point' > '2d.Point' > '2d.Shape' )).

%----polygon(list) = the polygon of which vertices are the members of list
thf('2d.polygon/1_type',type,(
    '2d.polygon/1': ( 'ListOf' @ '2d.Point' ) > '2d.Shape' )).

%----distance(p,q) = the distance between p and q
thf('2d.distance/2_type',type,(
    '2d.distance/2': '2d.Point' > '2d.Point' > $real )).

%----distance^2(p,q) = the square of the distance between p and q
thf('2d.distance^2/2_type',type,(
    '2d.distance^2/2': '2d.Point' > '2d.Point' > $real )).

%----point-shape-distance(p,shape) = the distance between p and shape
thf('2d.point-shape-distance/2_type',type,(
    '2d.point-shape-distance/2': '2d.Point' > '2d.Shape' > $real )).

%----point-shape-distance^2(p,shape) = the square of the distance between p and shape
thf('2d.point-shape-distance^2/2_type',type,(
    '2d.point-shape-distance^2/2': '2d.Point' > '2d.Shape' > $real )).

%----line-line-distance(l1,l2) = the distance between line l1 and line l2
thf('2d.line-line-distance/2_type',type,(
    '2d.line-line-distance/2': '2d.Shape' > '2d.Shape' > $real )).

%----line-line-distance^2(l1,l2) = the square of the distance between line l1 and line l2
thf('2d.line-line-distance^2/2_type',type,(
    '2d.line-line-distance^2/2': '2d.Shape' > '2d.Shape' > $real )).

%----shape-shape-distance(shape1,shape2) = the distance between shape1 and shape2
%----effective only if shape1 and shape2 are both either a line or a plane
thf('2d.shape-shape-distance/2_type',type,(
    '2d.shape-shape-distance/2': '2d.Shape' > '2d.Shape' > $real )).

%----shape-shape-distance^2(shape1,shape2) = the square of the distance between shape1 and shape2
%----effective only if shape1 and shape2 are both either a line or a plane
thf('2d.shape-shape-distance^2/2_type',type,(
    '2d.shape-shape-distance^2/2': '2d.Shape' > '2d.Shape' > $real )).

%----area-of(shape) = the area of shape
thf('2d.area-of/1_type',type,(
    '2d.area-of/1': '2d.Shape' > $real )).

%----centroid-of(T) = the center of gravity of triangle T
thf('2d.centroid-of/1_type',type,(
    '2d.centroid-of/1': '2d.Shape' > '2d.Point' )).

%----radius(v) = the magnitude of v
thf('2d.radius/1_type',type,(
    '2d.radius/1': '2d.Vector' > $real )).

%----radius^2(v) = the square of the magnitude of v
thf('2d.radius^2/1_type',type,(
    '2d.radius^2/1': '2d.Vector' > $real )).

%----length-of(shape) = the length of shape
%----effective only if shape is a circle, an arc, a segment, a triangle, a square, or a polygon
thf('2d.length-of/1_type',type,(
    '2d.length-of/1': '2d.Shape' > $real )).

%----midpoint-of(p,q) = the midpoint of p and q
thf('2d.midpoint-of/2_type',type,(
    '2d.midpoint-of/2': '2d.Point' > '2d.Point' > '2d.Point' )).

%----internally-dividing-point(p,q,r) = the point that divides segment pq internally in the ratio of r:1-r
thf('2d.internally-dividing-point/3_type',type,(
    '2d.internally-dividing-point/3': '2d.Point' > '2d.Point' > $real > '2d.Point' )).

%----center-of(shape) = the center of shape
%----effective only if shape is a circle, a disk, an arc, a circular sector, a semicircle, or a sphere
thf('2d.center-of/1_type',type,(
    '2d.center-of/1': '2d.Shape' > '2d.Point' )).

%----radius-of(shape) = the radius of shape
%----effective only if shape is a circle, a disk, an arc, a circular sector, a semicircle, or a sphere
thf('2d.radius-of/1_type',type,(
    '2d.radius-of/1': '2d.Shape' > $real )).

%----seg-midpoint-of(seg) = the midpoint of segment seg
thf('2d.seg-midpoint-of/1_type',type,(
    '2d.seg-midpoint-of/1': '2d.Shape' > '2d.Point' )).

%----seg-extension-of(seg) = the line including seg
thf('2d.seg-extention-of/1_type',type,(
    '2d.seg-extention-of/1': '2d.Shape' > '2d.Shape' )).

%----half-line-extension-of(h) = the line including half line h
thf('2d.half-line-extension-of/1_type',type,(
    '2d.half-line-extension-of/1': '2d.Shape' > '2d.Shape' )).

thf('2d.end-points-of/1_type',type,(
    '2d.end-points-of/1': '2d.Shape' > ( 'ListOf' @ '2d.Point' ) )).

%----is-end-point-of(p,s) <-> p is an end point of s
%----effective only if s is a segment or a half line
thf('2d.is-end-point-of/2_type',type,(
    '2d.is-end-point-of/2': '2d.Point' > '2d.Shape' > $o )).

%----vertices-of(shape) = the list of vertices of shape
thf('2d.vertices-of/1_type',type,(
    '2d.vertices-of/1': '2d.Shape' > ( 'ListOf' @ '2d.Point' ) )).

%----opposite-vertice-of(s,S) = a vetex of S that is not a vertex of side/face s
%----effective only if used as follows:
%----opposite-vertice-of(side, polygon), where member(side (sides-of polygon)) holds, or
%----opposite-vertice-of(face, polyhedron), where member(face (faces-of polyhedron)) holds
thf('2d.opposite-vertice-of/2_type',type,(
    '2d.opposite-vertice-of/2': '2d.Shape' > '2d.Shape' > '2d.Point' )).

%----extend-to-plane(shape) = the plane that contains shape
thf('2d.extend-to-plane/1_type',type,(
    '2d.extend-to-plane/1': '2d.Shape' > '2d.Shape' )).

%----local-system-of(arc, [v1,v2(,v3)]) = the orthogonal coordinate system [v1,v2(,v3)] of which v1 is a unit vector parallel to the vector from the center of arc and the initial point of arc
thf('2d.local-system-of/1_type',type,(
    '2d.local-system-of/1': '2d.Shape' > ( 'ListOf' @ '2d.Vector' ) )).

%----two-sides-of-rectangle(PQRS) = the pair of the sides PQ and QR of square PQRS
thf('2d.two-sides-of-rectangle/1_type',type,(
    '2d.two-sides-of-rectangle/1': '2d.Shape' > ( 'Pair' @ '2d.Shape' @ '2d.Shape' ) )).

%----shape-inside-of(shape) = the shape of the inner part of shape
thf('2d.shape-inside-of/1_type',type,(
    '2d.shape-inside-of/1': '2d.Shape' > '2d.Shape' )).

%----shape-inside-of(shape) = the shape of the outer part of shape
thf('2d.shape-outside-of/1_type',type,(
    '2d.shape-outside-of/1': '2d.Shape' > '2d.Shape' )).

%----inner-part-of(shape) = the shape of the inner part of shape
thf('2d.inner-part-of/1_type',type,(
    '2d.inner-part-of/1': '2d.Shape' > '2d.Shape' )).

%----with-boundary(shape) = the shape of the inner part and the boundary of shape
thf('2d.with-boundary/1_type',type,(
    '2d.with-boundary/1': '2d.Shape' > '2d.Shape' )).

%----boundary-of(shape) = the shape of the boundary of shape
thf('2d.boundary-of/1_type',type,(
    '2d.boundary-of/1': '2d.Shape' > '2d.Shape' )).

%----foot-of-perpendicular-line-from-to(p,shape) = the foot of the perpendicular line from p to shape
%----effective only if shape is a line or a plane
thf('2d.foot-of-perpendicular-line-from-to/2_type',type,(
    '2d.foot-of-perpendicular-line-from-to/2': '2d.Point' > '2d.Shape' > '2d.Point' )).

%----origin() = the origin
thf('2d.origin/0_type',type,(
    '2d.origin/0': '2d.Point' )).

%----x-axis() = the x-axis
thf('2d.x-axis/0_type',type,(
    '2d.x-axis/0': '2d.Shape' )).

%----y-axis() = the y-axis
thf('2d.y-axis/0_type',type,(
    '2d.y-axis/0': '2d.Shape' )).

thf('2d.xy-plane/0_type',type,(
    '2d.xy-plane/0': '2d.Shape' )).

%----is-empty(shape) <-> shape is empty
thf('2d.is-empty/1_type',type,(
    '2d.is-empty/1': '2d.Shape' > $o )).

%----on(p,shape) <-> p is on shape
thf('2d.on/2_type',type,(
    '2d.on/2': '2d.Point' > '2d.Shape' > $o )).

%----perpendicular(s1,s2) <-> s1 and s2 are perpendicular
thf('2d.perpendicular/2_type',type,(
    '2d.perpendicular/2': '2d.Shape' > '2d.Shape' > $o )).

%----parallel(s1,s2) <-> s1 and s2 are parallel
thf('2d.parallel/2_type',type,(
    '2d.parallel/2': '2d.Shape' > '2d.Shape' > $o )).

%----colinear(p,q,r) <-> three points p, q, r are on the line
thf('2d.colinear/3_type',type,(
    '2d.colinear/3': '2d.Point' > '2d.Point' > '2d.Point' > $o )).

%----points-colinear(list) <-> all points in list are on the line
thf('2d.points-colinear/1_type',type,(
    '2d.points-colinear/1': ( 'ListOf' @ '2d.Point' ) > $o )).

%----coplanar(p,q,r,s) <-> four points p, q, r, s are on the plane
thf('2d.coplanar/4_type',type,(
    '2d.coplanar/4': '2d.Point' > '2d.Point' > '2d.Point' > '2d.Point' > $o )).

%----points-coplanar(list) <-> all points in list are on the same plane
thf('2d.points-coplanar/1_type',type,(
    '2d.points-coplanar/1': ( 'ListOf' @ '2d.Point' ) > $o )).

%----points-with-equal-interval([p1,...,pn]) = the distances p1p2, ..., pnp1 are equal
thf('2d.points-with-equal-interval/1_type',type,(
    '2d.points-with-equal-interval/1': ( 'ListOf' @ '2d.Point' ) > $o )).

%----points-bending-by-equal-angle([p1,...,pn]) = the angles pnp1p2, ..., pn-1pnp1 are equal
thf('2d.points-bending-by-equal-angle/1_type',type,(
    '2d.points-bending-by-equal-angle/1': ( 'ListOf' @ '2d.Point' ) > $o )).

%----points-bending-to-same-side([p1,...,pn]) = the outer products of vectors (pipi+1 x pi+1pi+2) are of the same direction for all 1<=i<=n ,where pn+i=pi
thf('2d.points-bending-to-same-side/1_type',type,(
    '2d.points-bending-to-same-side/1': ( 'ListOf' @ '2d.Point' ) > $o )).

%----point-inside-of(p,shape) <-> p is a point inside of shape
thf('2d.point-inside-of/2_type',type,(
    '2d.point-inside-of/2': '2d.Point' > '2d.Shape' > $o )).

%----inside-of(shape1,shape2) <-> shape1 is contained by the inside of shape2
thf('2d.inside-of/2_type',type,(
    '2d.inside-of/2': '2d.Shape' > '2d.Shape' > $o )).

%----point-outside-of(p,shape) <-> p is a point outside of shape
thf('2d.point-outside-of/2_type',type,(
    '2d.point-outside-of/2': '2d.Point' > '2d.Shape' > $o )).

%----outside-of(shape1,shape2) <-> shape1 is contained by the outside of shape2
thf('2d.outside-of/2_type',type,(
    '2d.outside-of/2': '2d.Shape' > '2d.Shape' > $o )).

%----is-triangle(p,q,r) <-> three points p, q, r form a triangle
thf('2d.is-triangle/3_type',type,(
    '2d.is-triangle/3': '2d.Point' > '2d.Point' > '2d.Point' > $o )).

%----is-right-triangle(p,q,r) <-> three points p, q, r form a right triangle
thf('2d.is-right-triangle/3_type',type,(
    '2d.is-right-triangle/3': '2d.Point' > '2d.Point' > '2d.Point' > $o )).

%----is-right-triangle(T) <-> T is a right triangle
thf('2d.is-right-triangle/1_type',type,(
    '2d.is-right-triangle/1': '2d.Shape' > $o )).

%----is-isosceles-triangle(p,q,r) <-> three points p, q, r form an isosceles triangle
thf('2d.is-isosceles-triangle/3_type',type,(
    '2d.is-isosceles-triangle/3': '2d.Point' > '2d.Point' > '2d.Point' > $o )).

%----is-isosceles-triangle(T) <-> T is an isosceles triangle
thf('2d.is-isosceles-triangle/1_type',type,(
    '2d.is-isosceles-triangle/1': '2d.Shape' > $o )).

%----is-acute-triangle(p,q,r) <-> three points p, q, r form an acute triangle
thf('2d.is-acute-triangle/3_type',type,(
    '2d.is-acute-triangle/3': '2d.Point' > '2d.Point' > '2d.Point' > $o )).

%----is-acute-triangle(T) <-> T is an acute triangle
thf('2d.is-acute-triangle/1_type',type,(
    '2d.is-acute-triangle/1': '2d.Shape' > $o )).

%----is-obtuse-triangle(p,q,r) <-> three points p, q, r form an obtuse triangle
thf('2d.is-obtuse-triangle/3_type',type,(
    '2d.is-obtuse-triangle/3': '2d.Point' > '2d.Point' > '2d.Point' > $o )).

%----is-obtuse-triangle(T) <-> T is an obtuse triangle
thf('2d.is-obtuse-triangle/1_type',type,(
    '2d.is-obtuse-triangle/1': '2d.Shape' > $o )).

%----is-equilateral-triangle(p,q,r) <-> three points p, q, r form an equilateral triangle
thf('2d.is-equilateral-triangle/3_type',type,(
    '2d.is-equilateral-triangle/3': '2d.Point' > '2d.Point' > '2d.Point' > $o )).

%----is-equilateral-triangle(T) <-> T is an equilateral triangle
thf('2d.is-equilateral-triangle/1_type',type,(
    '2d.is-equilateral-triangle/1': '2d.Shape' > $o )).

%----is-square(p,q,r,s) <-> four points p, q, r, s form a convex square
thf('2d.is-square/4_type',type,(
    '2d.is-square/4': '2d.Point' > '2d.Point' > '2d.Point' > '2d.Point' > $o )).

%----is-regular-square(p,q,r,s) <-> four points p, q, r, s form a regular square
thf('2d.is-regular-square/4_type',type,(
    '2d.is-regular-square/4': '2d.Point' > '2d.Point' > '2d.Point' > '2d.Point' > $o )).

%----is-rectangle(S) <-> S is a regular square
thf('2d.is-regular-square/1_type',type,(
    '2d.is-regular-square/1': '2d.Shape' > $o )).

%----is-rectangle(p,q,r,s) <-> four points p, q, r, s form a rectangle
thf('2d.is-rectangle/4_type',type,(
    '2d.is-rectangle/4': '2d.Point' > '2d.Point' > '2d.Point' > '2d.Point' > $o )).

%----is-rectangle(S) <-> S is a rectangle
thf('2d.is-rectangle/1_type',type,(
    '2d.is-rectangle/1': '2d.Shape' > $o )).

%----is-rhombus(p,q,r,s) <-> four points p, q, r, s form a rhombus
thf('2d.is-rhombus/4_type',type,(
    '2d.is-rhombus/4': '2d.Point' > '2d.Point' > '2d.Point' > '2d.Point' > $o )).

%----is-rhombus(S) <-> S is a rhombus
thf('2d.is-rhombus/1_type',type,(
    '2d.is-rhombus/1': '2d.Shape' > $o )).

%----is-trapezoid(p,q,r,s) <-> four points p, q, r, s form a trapezoid
thf('2d.is-trapezoid/4_type',type,(
    '2d.is-trapezoid/4': '2d.Point' > '2d.Point' > '2d.Point' > '2d.Point' > $o )).

%----is-trapezoid(S) <-> S is a trapezoid
thf('2d.is-trapezoid/1_type',type,(
    '2d.is-trapezoid/1': '2d.Shape' > $o )).

%----is-parallelogram(p,q,r,s) <-> four points p, q, r, s form a parallelogram
thf('2d.is-parallelogram/4_type',type,(
    '2d.is-parallelogram/4': '2d.Point' > '2d.Point' > '2d.Point' > '2d.Point' > $o )).

%----is-parallelogram(S) <-> S is a parallelogram
thf('2d.is-parallelogram/1_type',type,(
    '2d.is-parallelogram/1': '2d.Shape' > $o )).

%----is-polygon(list) <-> the points in list form a polygon
thf('2d.is-polygon/1_type',type,(
    '2d.is-polygon/1': ( 'ListOf' @ '2d.Point' ) > $o )).

%----is-regular-polygon(S) <-> S is a regular polygon
thf('2d.is-regular-polygon/1_type',type,(
    '2d.is-regular-polygon/1': '2d.Shape' > $o )).

%----is-convex-shape(S) <-> S is a convex shape
%----effective only if S is a polygon
thf('2d.is-convex-shape/1_type',type,(
    '2d.is-convex-shape/1': '2d.Shape' > $o )).

%----tangent(shape1,shape2,p) <-> shape1 is tangent to shape2 at p
thf('2d.tangent/3_type',type,(
    '2d.tangent/3': '2d.Shape' > '2d.Shape' > '2d.Point' > $o )).

%----tangent(shape1,shape2,p) <-> shape1 is tangent to shape2 at some point
thf('2d.tangent/2_type',type,(
    '2d.tangent/2': '2d.Shape' > '2d.Shape' > $o )).

%----tangent-to-all(shape, list) <-> shape is tangent to all shapes in list
thf('2d.tangent-to-all/2_type',type,(
    '2d.tangent-to-all/2': '2d.Shape' > ( 'ListOf' @ '2d.Shape' ) > $o )).

%----normal-line(line, curve, p) <-> line is the normal line of curve at p
thf('2d.normal-line/3_type',type,(
    '2d.normal-line/3': '2d.Shape' > '2d.Shape' > '2d.Point' > $o )).

%----translate(shape1,v,a,shape2) <-> shape1 coincides shape2 by parallel shift by av
thf('2d.translate/4_type',type,(
    '2d.translate/4': '2d.Shape' > '2d.Vector' > $real > '2d.Shape' > $o )).

%----translate(shape,v) <-> the shape which is shape shifted by v
thf('2d.translate/2_type',type,(
    '2d.translate/2': '2d.Shape' > '2d.Vector' > '2d.Shape' )).

%----intersect(shape1, shape2, p) <-> shape1 intersects shape2 at p
thf('2d.intersect/3_type',type,(
    '2d.intersect/3': '2d.Shape' > '2d.Shape' > '2d.Point' > $o )).

%----intersect(shape1, shape2) <-> shape1 intersects shape2 at some point
thf('2d.intersect/2_type',type,(
    '2d.intersect/2': '2d.Shape' > '2d.Shape' > $o )).

%----are-intersection-points-of([a1,...,am], [s1,...,sn]) <-> list of points [a1,...,am] enumarates all the points of the intersection of si's
thf('2d.are-intersection-points-of/2_type',type,(
    '2d.are-intersection-points-of/2': ( 'ListOf' @ '2d.Point' ) > ( 'ListOf' @ '2d.Shape' ) > $o )).

%----is-inscribed-in(shape1,shape2) <-> shape1 is inscribed in shape2
thf('2d.is-inscribed-in/2_type',type,(
    '2d.is-inscribed-in/2': '2d.Shape' > '2d.Shape' > $o )).

%----is-circumscribed-about(shape1,shape2) <-> shape1 is circumscribed about shape2
%----effective only if shape1 and shape2 are circles
thf('2d.is-circumscribed-about/2_type',type,(
    '2d.is-circumscribed-about/2': '2d.Shape' > '2d.Shape' > $o )).

%----similar(shape1,shape2) <-> shape1 and shape2 are similar
thf('2d.similar/2_type',type,(
    '2d.similar/2': '2d.Shape' > '2d.Shape' > $o )).

%----ordered-similar(shape1,shape2) <-> shape1 and shape2 are similar in the given order of vertices
%----effective only if shape1 and shape2 are both triangles or squares
thf('2d.ordered-similar/2_type',type,(
    '2d.ordered-similar/2': '2d.Shape' > '2d.Shape' > $o )).

%----congruent(shape1,shape2) <-> shape1 and shape2 are congruent
thf('2d.congruent/2_type',type,(
    '2d.congruent/2': '2d.Shape' > '2d.Shape' > $o )).

%----ordered-congruent(shape1,shape2) <-> shape1 and shape2 are congruent in the given order of vertices
%----effective only if shape1 and shape2 are both triangles or squares
thf('2d.ordered-congruent/2_type',type,(
    '2d.ordered-congruent/2': '2d.Shape' > '2d.Shape' > $o )).

%----divide-internally(p,seg,r1,r2) <-> p divides seg internally in the ratio r1:r2
thf('2d.divide-internally/4_type',type,(
    '2d.divide-internally/4': '2d.Point' > '2d.Shape' > $real > $real > $o )).

%----divide-externally(p,seg,r1,r2) <-> p divides seg externally in the ratio r1:r2
thf('2d.divide-externally/4_type',type,(
    '2d.divide-externally/4': '2d.Point' > '2d.Shape' > $real > $real > $o )).

%----determine(list, shape) <-> shape is determined by list
%----effective only if list consists of three points and shape is a plane
thf('2d.determine/2_type',type,(
    '2d.determine/2': ( 'ListOf' @ '2d.Point' ) > '2d.Shape' > $o )).

%----form(list,shape) <-> the points in list form shape
%----effective only if list consists of three points and shape is a triangle
thf('2d.form/2_type',type,(
    '2d.form/2': ( 'ListOf' @ '2d.Point' ) > '2d.Shape' > $o )).

%----form-by-shapes(list,shape) <-> the shapes in list form shape
%----effective only if list consists of three lines and shape is a triangle
thf('2d.form-by-shapes/2_type',type,(
    '2d.form-by-shapes/2': ( 'ListOf' @ '2d.Shape' ) > '2d.Shape' > $o )).

%----point-symmetry(p1,p2,q) <-> p1 and p2 are symmetric with respect to point q
thf('2d.point-symmetry/3_type',type,(
    '2d.point-symmetry/3': '2d.Point' > '2d.Point' > '2d.Point' > $o )).

%----point-symmetry-shape(shape,p) <-> shape is symmetric with respect to point p
thf('2d.point-symmetry-shape/2_type',type,(
    '2d.point-symmetry-shape/2': '2d.Shape' > '2d.Point' > $o )).

%----point-symmetry-shapes(shape1,shape2,p) <-> shape1 and shape2 are symmetric with respect to point q
thf('2d.point-symmetry-shapes/3_type',type,(
    '2d.point-symmetry-shapes/3': '2d.Shape' > '2d.Shape' > '2d.Point' > $o )).

%----line-symmetry(p1,p2,l) <-> p1 and p2 are symmetric with respect to line l
thf('2d.line-symmetry/3_type',type,(
    '2d.line-symmetry/3': '2d.Point' > '2d.Point' > '2d.Shape' > $o )).

%----line-symmetry-shape(shape,l) <-> shape is symmetric with respect to line l
thf('2d.line-symmetry-shape/2_type',type,(
    '2d.line-symmetry-shape/2': '2d.Shape' > '2d.Shape' > $o )).

%line-symmetry-shapes(shape1,shape2,l) <-> shape1 and shape2 are symmetric with respect to line l
thf('2d.line-symmetry-shapes/3_type',type,(
    '2d.line-symmetry-shapes/3': '2d.Shape' > '2d.Shape' > '2d.Shape' > $o )).

%----connect(shape,list) <-> shape connects the points in list
%----effective only if shape is a segment and list consists of two points
thf('2d.connect/2_type',type,(
    '2d.connect/2': '2d.Shape' > ( 'ListOf' @ '2d.Point' ) > $o )).

%----is-a-side-of(shape1,shape2) <-> shape1 is a side of shape2
thf('2d.is-a-side-of/2_type',type,(
    '2d.is-a-side-of/2': '2d.Shape' > '2d.Shape' > $o )).

%----are-the-sides-of(list,shape) <-> list enumerates all sides of shape
thf('2d.are-the-sides-of/2_type',type,(
    '2d.are-the-sides-of/2': ( 'ListOf' @ '2d.Shape' ) > '2d.Shape' > $o )).

%----is-base-of(shape1,shape2) <-> shape1 is the base of shape2
%----effective only if shape1 is a segment and shape2 is an isosceles triangle
thf('2d.is-base-of/2_type',type,(
    '2d.is-base-of/2': '2d.Shape' > '2d.Shape' > $o )).

%----sides-of(shape) = the list of the sides of shape
thf('2d.sides-of/1_type',type,(
    '2d.sides-of/1': '2d.Shape' > ( 'ListOf' @ '2d.Shape' ) )).

%----converge-point([an], p) <-> the sequence of points [an] converges to p
thf('2d.converge-point/2_type',type,(
    '2d.converge-point/2': ( $int > '2d.Point' ) > '2d.Point' > $o )).

%----is-interior-angle-of(a,shape) <-> a is the degree in radian of an interior angle of shape
%----effective only if shape is a triangle
thf('2d.is-interior-angle-of/2_type',type,(
    '2d.is-interior-angle-of/2': $real > '2d.Shape' > $o )).

%----are-interior-angles-of(list,shape) <-> list enumerates all the degrees in radian of interior angles of shape
%----effective only if shape is a triangle
thf('2d.are-interior-angles-of/2_type',type,(
    '2d.are-interior-angles-of/2': ( 'ListOf' @ $real ) > '2d.Shape' > $o )).

%----lines-intersect-angle(l1,l2,a) <-> l1 and l2 intersect at degree a
thf('2d.lines-intersect-angle/3_type',type,(
    '2d.lines-intersect-angle/3': '2d.Shape' > '2d.Shape' > $real > $o )).

%----convex-upward(shape) <-> shape is upward convex
thf('2d.convex-upward/1_type',type,(
    '2d.convex-upward/1': '2d.Shape' > $o )).

%----convex-downward(shape) <-> shape is downward convex
thf('2d.convex-downward/1_type',type,(
    '2d.convex-downward/1': '2d.Shape' > $o )).

%----shape-of-cpfun(phi) = the shape of which characteristic function is phi
thf('2d.shape-of-cpfun/1_type',type,(
    '2d.shape-of-cpfun/1': ( '2d.Point' > $o ) > '2d.Shape' )).

%----char-fun-of(shape) = the characteristic function of shape
thf('2d.char-fun-of/1_type',type,(
    '2d.char-fun-of/1': '2d.Shape' > '2d.Point' > $o )).

%----set-as-shape(set) = the shape of which underlying set is set
thf('2d.set-as-shape/1_type',type,(
    '2d.set-as-shape/1': ( 'SetOf' @ '2d.Point' ) > '2d.Shape' )).

%----shape-as-set(shape) = the set of points on shape
thf('2d.shape-as-set/1_type',type,(
    '2d.shape-as-set/1': '2d.Shape' > ( 'SetOf' @ '2d.Point' ) )).

%----is-opposite-of-wrt(p,q,shape) <-> p and q are on opposite sides with respect to shape
%----effective only if shape is a segment or a line
thf('2d.is-opposite-of-wrt/3_type',type,(
    '2d.is-opposite-of-wrt/3': '2d.Point' > '2d.Point' > '2d.Shape' > $o )).

%----trivially true for any Point
thf('2d.is-point/1_type',type,(
    '2d.is-point/1': '2d.Point' > $o )).

%----intersection(shape1,shape2) = the intersection of shape1 and shape2
thf('2d.intersection/2_type',type,(
    '2d.intersection/2': '2d.Shape' > '2d.Shape' > '2d.Shape' )).

%----intersection(list) = the intersection of all shapes in list
thf('2d.intersection/1_type',type,(
    '2d.intersection/1': ( 'ListOf' @ '2d.Shape' ) > '2d.Shape' )).

%----union(shape1,shape2) = the union of shape1 and shape2
thf('2d.union/2_type',type,(
    '2d.union/2': '2d.Shape' > '2d.Shape' > '2d.Shape' )).

%----union(list) = the union of all shapes in list
thf('2d.union/1_type',type,(
    '2d.union/1': ( 'ListOf' @ '2d.Shape' ) > '2d.Shape' )).

%----complement(shape) = the complement of shape in R^2 or R^3
thf('2d.complement/1_type',type,(
    '2d.complement/1': '2d.Shape' > '2d.Shape' )).

%----shape-(shape1,shape2) = the defference of shape1 and shape2
thf('2d.shape-/2_type',type,(
    '2d.shape-/2': '2d.Shape' > '2d.Shape' > '2d.Shape' )).

%----shape-enclosed-by(list) = the shape enclosed by the shapes in list
thf('2d.shape-enclosed-by/1_type',type,(
    '2d.shape-enclosed-by/1': ( 'ListOf' @ '2d.Shape' ) > '2d.Shape' )).

%----line-type(shape) <-> shape is a line
thf('2d.line-type/1_type',type,(
    '2d.line-type/1': '2d.Shape' > $o )).

%----half-line-type(shape) <-> shape is a half line
thf('2d.half-line-type/1_type',type,(
    '2d.half-line-type/1': '2d.Shape' > $o )).

%----segment-type(shape) <-> shape is a segment
thf('2d.segment-type/1_type',type,(
    '2d.segment-type/1': '2d.Shape' > $o )).

%----triangle-type(shape) <-> shape is a triangle
thf('2d.triangle-type/1_type',type,(
    '2d.triangle-type/1': '2d.Shape' > $o )).

%----equilateral-triangle-type(shape) <-> shape is an equilateral triangle
thf('2d.equilateral-triangle-type/1_type',type,(
    '2d.equilateral-triangle-type/1': '2d.Shape' > $o )).

%----acute-triangle-type(shape) <-> shape is an acute triangle
thf('2d.acute-triangle-type/1_type',type,(
    '2d.acute-triangle-type/1': '2d.Shape' > $o )).

%----right-triangle-type(shape) <-> shape is a right triangle
thf('2d.right-triangle-type/1_type',type,(
    '2d.right-triangle-type/1': '2d.Shape' > $o )).

%----obtuse-triangle-type(shape) <-> shape is a obtuse triangle
thf('2d.obtuse-triangle-type/1_type',type,(
    '2d.obtuse-triangle-type/1': '2d.Shape' > $o )).

%----isosceles-triangle-type(shape) <-> shape is an isosceles triangle
thf('2d.isosceles-triangle-type/1_type',type,(
    '2d.isosceles-triangle-type/1': '2d.Shape' > $o )).

%----square-type(shape) <-> shape is a square
thf('2d.square-type/1_type',type,(
    '2d.square-type/1': '2d.Shape' > $o )).

%----rectangle-type(shape) <-> shape is a rectangle
thf('2d.rectangle-type/1_type',type,(
    '2d.rectangle-type/1': '2d.Shape' > $o )).

%----regular-square-type(shape) <-> shape is a regular square
thf('2d.regular-square-type/1_type',type,(
    '2d.regular-square-type/1': '2d.Shape' > $o )).

%----regular-pentagon-type(shape) <-> shape is a regular pentagon
thf('2d.regular-pentagon-type/1_type',type,(
    '2d.regular-pentagon-type/1': '2d.Shape' > $o )).

%----regular-hexagon-type(shape) <-> shape is a regular hexagon
thf('2d.regular-hexagon-type/1_type',type,(
    '2d.regular-hexagon-type/1': '2d.Shape' > $o )).

%----rhombus-type(shape) <-> shape is a rhombus
thf('2d.rhombus-type/1_type',type,(
    '2d.rhombus-type/1': '2d.Shape' > $o )).

%----trapezoid-type(shape) <-> shape is a trapezoid
thf('2d.trapezoid-type/1_type',type,(
    '2d.trapezoid-type/1': '2d.Shape' > $o )).

%----parallelogram-type(shape) <-> shape is a parallelogram
thf('2d.parallelogram-type/1_type',type,(
    '2d.parallelogram-type/1': '2d.Shape' > $o )).

%----polygon-type(shape) <-> shape is a polygon
thf('2d.polygon-type/1_type',type,(
    '2d.polygon-type/1': '2d.Shape' > $o )).

%-------------------------------------------
%----Axis of coordinates (as a special object)
%-------------------------------------------
thf('2d.Axis_type',type,(
    '2d.Axis': $tType )).

thf('2d.axis-along/1_type',type,(
    '2d.axis-along/1': '2d.Vector' > '2d.Axis' )).

thf('2d.direction-of/1_type',type,(
    '2d.direction-of/1': '2d.Axis' > '2d.Vector' )).

%;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
%----Points
%;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
thf('2d.point/2_type',type,(
    '2d.point/2': $real > $real > '2d.Point' )).

%----point-rotate-around-origin(p,a) = the point which is p rotated around origin by angle a in radian
thf('2d.point-rotate-around-origin/2_type',type,(
    '2d.point-rotate-around-origin/2': '2d.Point' > $real > '2d.Point' )).

%----vec-rotate-around-origin(p,a) = the vector which is p rotated around origin by angle a in radian
thf('2d.vec-rotate-around-origin/2_type',type,(
    '2d.vec-rotate-around-origin/2': '2d.Vector' > $real > '2d.Vector' )).

%----point-rotate-around-origin(p,q,a) = the point which is p rotated around q by angle a in radian
thf('2d.point-rotate-around/3_type',type,(
    '2d.point-rotate-around/3': '2d.Point' > '2d.Point' > $real > '2d.Point' )).

%----in-counter-clockwise-direction(list) <-> the points in list are in counter clockwise order
thf('2d.in-counter-clockwise-direction/1_type',type,(
    '2d.in-counter-clockwise-direction/1': ( 'ListOf' @ '2d.Point' ) > $o )).

%----x-coord(p) = the x-coordinate of p
thf('2d.x-coord/1_type',type,(
    '2d.x-coord/1': '2d.Point' > $real )).

%----x-coord(p) = the x-coordinate of p
thf('2d.y-coord/1_type',type,(
    '2d.y-coord/1': '2d.Point' > $real )).

%----x-coord(v) = the x-coordinate of v
thf('2d.vec-x-coord/1_type',type,(
    '2d.vec-x-coord/1': '2d.Vector' > $real )).

%----y-coord(v) = the y-coordinate of v
thf('2d.vec-y-coord/1_type',type,(
    '2d.vec-y-coord/1': '2d.Vector' > $real )).

%;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
%----Vectortors
%;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
%----vec3d(a,b) = the vector of components a and b
thf('2d.vec2d/2_type',type,(
    '2d.vec2d/2': $real > $real > '2d.Vector' )).

%----vec-to-point(v) =  transform vector v to point (to use vector(but type is point) operate)
thf('2d.vec-to-point/1_type',type,(
    '2d.vec-to-point/1': '2d.Vector' > '2d.Point' )).

%----outer-prod(u,v) = the value u1v2 - v1u2, where u=(u1,u2) and v=(v1,v2)
thf('2d.outer-prod/2_type',type,(
    '2d.outer-prod/2': '2d.Vector' > '2d.Vector' > $real )).

%;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
%----2x2 Matrices
%----(matrix a11 a12 
%----        a21 a22)
%;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
%----matrix(a11,a12,a21,a22) = the matrix (aij)
thf('2d.matrix/4_type',type,(
    '2d.matrix/4': $real > $real > $real > $real > '2d.Matrix' )).

%----set-of-cfun(phi(*,*)) = the shape of which characteristic function is phi
thf('2d.set-of-cfun/1_type',type,(
    '2d.set-of-cfun/1': ( $real > $real > $o ) > '2d.Shape' )).

%----graph-of(f(*)) = the shape of the graph of y = f(x)
thf('2d.graph-of/1_type',type,(
    '2d.graph-of/1': 'R2R' > '2d.Shape' )).

%----graph-of-implicit-function(f(*,*)) = the shape of the graph of f(x,y) = 0
thf('2d.graph-of-implicit-function/1_type',type,(
    '2d.graph-of-implicit-function/1': ( $real > $real > $real ) > '2d.Shape' )).

%----shape-rotate-around-origin(shape,a) = the shape which is shape rotated around origin by angle a in radian
thf('2d.shape-rotate-around-origin/2_type',type,(
    '2d.shape-rotate-around-origin/2': '2d.Shape' > $real > '2d.Shape' )).

%----shape-rotate-around-origin(shape,p,a) = the shape which is shape rotated around p by angle a in radian
thf('2d.shape-rotate-around/3_type',type,(
    '2d.shape-rotate-around/3': '2d.Shape' > '2d.Point' > $real > '2d.Shape' )).

%----is-symmetry-axis-of(shape1,shape2) <-> shape1 is a symmetry axis of shape2
%----effective only if shape1 is a line
thf('2d.is-symmetry-axis-of/2_type',type,(
    '2d.is-symmetry-axis-of/2': '2d.Shape' > '2d.Shape' > $o )).

%----trivially true for any Shape
thf('2d.is-graph/1_type',type,(
    '2d.is-graph/1': '2d.Shape' > $o )).

%----trivially true for any Shape
thf('2d.is-curve/1_type',type,(
    '2d.is-curve/1': '2d.Shape' > $o )).

%;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
%----Lines
%;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
%----line2d(a,b,c) = the line ax + by = c
thf('2d.line2d/3_type',type,(
    '2d.line2d/3': $real > $real > $real > '2d.Shape' )).

%----is-slope-of(a,line) <-> the slope of line is a
thf('2d.is-slope-of/2_type',type,(
    '2d.is-slope-of/2': $real > '2d.Shape' > $o )).

%----is-x-intercept-of(a,line) <-> the x-intercept of line is a
thf('2d.is-x-intercept-of/2_type',type,(
    '2d.is-x-intercept-of/2': $real > '2d.Shape' > $o )).

%----is-y-intercept-of(a,line) <-> the y-intercept of line is a
thf('2d.is-y-intercept-of/2_type',type,(
    '2d.is-y-intercept-of/2': $real > '2d.Shape' > $o )).

%----line-parameter(line) = the list [a,b,c], where line is expressed by ax + by = c
%----the expression of line is restricted to b = -1 or b = 0 and a = -1
thf('2d.line-parameter/1_type',type,(
    '2d.line-parameter/1': '2d.Shape' > ( 'ListOf' @ $real ) )).

%----upper-area-of(line) = the shape of the upper area of line
%----the shape of the left area of line for the line x = c
thf('2d.upper-area-of/1_type',type,(
    '2d.upper-area-of/1': '2d.Shape' > '2d.Shape' )).

%----lower-area-of(line) = the shape of the lower area of line
%----the shape of the right area of line for the line x = c
thf('2d.lower-area-of/1_type',type,(
    '2d.lower-area-of/1': '2d.Shape' > '2d.Shape' )).

%----polyline([p1,...,pn]) = the shape of the union of the segments p1p2, ..., pn-1pn
thf('2d.polyline/1_type',type,(
    '2d.polyline/1': ( 'ListOf' @ '2d.Point' ) > '2d.Shape' )).

%----points-same-side(line, list) <-> all the points in list are on the same side of line
thf('2d.points-same-side/2_type',type,(
    '2d.points-same-side/2': '2d.Shape' > ( 'ListOf' @ '2d.Point' ) > $o )).

%----shapes-same-side(line, list) <-> all the shapes in list are included in the same side of line 
thf('2d.shapes-same-side/2_type',type,(
    '2d.shapes-same-side/2': '2d.Shape' > ( 'ListOf' @ '2d.Shape' ) > $o )).

%----points-opp-side(line,p,q) <-> p and q are on the opposite side of line
thf('2d.points-opp-side/3_type',type,(
    '2d.points-opp-side/3': '2d.Shape' > '2d.Point' > '2d.Point' > $o )).

%;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
%----Triangles
%;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
%----is-excircle-of(S,T,p) <-> circle S is the excircle of triangle T tangent to the opposite side of p
%----effective only if p is a vertex of triangle T
thf('2d.is-excircle-of/3_type',type,(
    '2d.is-excircle-of/3': '2d.Shape' > '2d.Shape' > '2d.Point' > $o )).

%;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
%----Polygon
%----not implemented
%----regular-n-polygon(n,p,q) = the regular n polygon one of whose segment is pq 
thf('2d.regular-n-polygon/3_type',type,(
    '2d.regular-n-polygon/3': $int > '2d.Point' > '2d.Point' > '2d.Shape' )).

%;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
%----Angles
%;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
%----angle-in-counterclockwise(u,v) = the angle in radian between p and q in counterclockwise direction
thf('2d.angle-in-counterclockwise/2_type',type,(
    '2d.angle-in-counterclockwise/2': '2d.Vector' > '2d.Vector' > $real )).

%;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
%----Circles and arcs
%;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
%----unit-circle() = the circle of which center is the origin and radius 1
thf('2d.unit-circle/0_type',type,(
    '2d.unit-circle/0': '2d.Shape' )).

%----circle(p,a) = the circle of which center is p and radius a
thf('2d.circle/2_type',type,(
    '2d.circle/2': '2d.Point' > $real > '2d.Shape' )).

%----disk(p,a) = the disk of which center is p and radius a
thf('2d.disk/2_type',type,(
    '2d.disk/2': '2d.Point' > $real > '2d.Shape' )).

%----arc(p,r,a,b) = the arc of which center is p, radius r, initial angle a, and final angle b
thf('2d.arc/4_type',type,(
    '2d.arc/4': '2d.Point' > $real > $real > $real > '2d.Shape' )).

%----is-radius-of(seg, circle) <-> seg is a radius of circle
thf('2d.is-radius-of/2_type',type,(
    '2d.is-radius-of/2': '2d.Shape' > '2d.Shape' > $o )).

%----is-chord-of(seg, circle) <-> seg is a chord of circle
thf('2d.is-chord-of/2_type',type,(
    '2d.is-chord-of/2': '2d.Shape' > '2d.Shape' > $o )).

%----concircular(list) <-> all the points in list lie on a common circle
thf('2d.concircular/1_type',type,(
    '2d.concircular/1': ( 'ListOf' @ '2d.Point' ) > $o )).

%;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
%----circular sectors and semicircle
%;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
%----circular-sector(p,r,a,b) = the circular sector of which center is p, radius r, initial angle a, and final angle b
thf('2d.circular-sector/4_type',type,(
    '2d.circular-sector/4': '2d.Point' > $real > $real > $real > '2d.Shape' )).

%----semicircle(p,r,a) = the semicircle of which center is p, radius r, and initial angle a
thf('2d.semicircle/3_type',type,(
    '2d.semicircle/3': '2d.Point' > $real > $real > '2d.Shape' )).

thf('2d.ellipse/3_type',type,(
    '2d.ellipse/3': '2d.Point' > '2d.Point' > $real > '2d.Shape' )).

thf('2d.ellipse-type/1_type',type,(
    '2d.ellipse-type/1': '2d.Shape' > $o )).

thf('2d.major-radius/1_type',type,(
    '2d.major-radius/1': '2d.Shape' > $real )).

thf('2d.minor-radius/1_type',type,(
    '2d.minor-radius/1': '2d.Shape' > $real )).

thf('2d.is-axis-of/2_type',type,(
    '2d.is-axis-of/2': '2d.Shape' > '2d.Shape' > $o )).

thf('2d.major-axis-of/1_type',type,(
    '2d.major-axis-of/1': '2d.Shape' > '2d.Shape' )).

thf('2d.minor-axis-of/1_type',type,(
    '2d.minor-axis-of/1': '2d.Shape' > '2d.Shape' )).

thf('2d.hyperbola-type/1_type',type,(
    '2d.hyperbola-type/1': '2d.Shape' > $o )).

thf('2d.hyperbola/3_type',type,(
    '2d.hyperbola/3': '2d.Point' > '2d.Point' > $real > '2d.Shape' )).

thf('2d.parabola-type/1_type',type,(
    '2d.parabola-type/1': '2d.Shape' > $o )).

thf('2d.parabola/2_type',type,(
    '2d.parabola/2': '2d.Point' > '2d.Point' > '2d.Shape' )).

thf('2d.directrix/1_type',type,(
    '2d.directrix/1': '2d.Shape' > '2d.Shape' )).

%----trivially true for any Shape
thf('2d.graph/1_type',type,(
    '2d.graph/1': '2d.Shape' > $o )).

%----parabola(shape) <-> shape is the parabola expressed by y = ax^2 + bx +c
thf('2d.parabola/1_type',type,(
    '2d.parabola/1': '2d.Shape' > $o )).

%----move-along-counter-clockwise-len(circle,p,q,a) <-> q is p moved along circle by len in counter clockwise direction
thf('2d.move-along-counter-clockwise-len/4_type',type,(
    '2d.move-along-counter-clockwise-len/4': '2d.Shape' > '2d.Point' > '2d.Point' > $real > $o )).

%----trivially true for any Shape
thf('2d.region/1_type',type,(
    '2d.region/1': '2d.Shape' > $o )).

%----circle-type(shape) <-> shape is a circle
thf('2d.circle-type/1_type',type,(
    '2d.circle-type/1': '2d.Shape' > $o )).

%----disk-type(shape) <-> shape is a disk
thf('2d.disk-type/1_type',type,(
    '2d.disk-type/1': '2d.Shape' > $o )).

%----semicircle-type(shape) <-> shape is a semicircle
thf('2d.semicircle-type/1_type',type,(
    '2d.semicircle-type/1': '2d.Shape' > $o )).

%----arc-type(shape) <-> shape is an arc
thf('2d.arc-type/1_type',type,(
    '2d.arc-type/1': '2d.Shape' > $o )).

%----circular-sector-type(shape) <-> shape is a circular sector
thf('2d.circular-sector-type/1_type',type,(
    '2d.circular-sector-type/1': '2d.Shape' > $o )).

%----convex-upward(shape, set) <-> shape is upward convex on set
thf('2d.convex-upward/2_type',type,(
    '2d.convex-upward/2': '2d.Shape' > ( 'SetOf' @ $real ) > $o )).

%----convex-downward(shape, set) <-> shape is downward convex on set
thf('2d.convex-downward/2_type',type,(
    '2d.convex-downward/2': '2d.Shape' > ( 'SetOf' @ $real ) > $o )).

%----1st-quadrant() = the first quadrant
thf('2d.1st-quadrant/0_type',type,(
    '2d.1st-quadrant/0': '2d.Shape' )).

%----2nd-quadrant() = the second quadrant
thf('2d.2nd-quadrant/0_type',type,(
    '2d.2nd-quadrant/0': '2d.Shape' )).

%----3rd-quadrant() = the third quadrant
thf('2d.3rd-quadrant/0_type',type,(
    '2d.3rd-quadrant/0': '2d.Shape' )).

%----4th-quadrant() = the fourth quadrant
thf('2d.4th-quadrant/0_type',type,(
    '2d.4th-quadrant/0': '2d.Shape' )).

%----is-focus-of(p,shape) <-> p is a focus of shape
%----effective only if shape is an ellipse, parabola or a hyperbola
thf('2d.is-focus-of/2_type',type,(
    '2d.is-focus-of/2': '2d.Point' > '2d.Shape' > $o )).

thf('2d.are-foci-of/2_type',type,(
    '2d.are-foci-of/2': ( 'ListOf' @ '2d.Point' ) > '2d.Shape' > $o )).

thf('2d.is-asymptote-of/2_type',type,(
    '2d.is-asymptote-of/2': '2d.Shape' > '2d.Shape' > $o )).

%------------------------------------------------------------------------------
%
%----3D Geometry
%
%------------------------------------------------------------------------------
%;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
%----3D Geometry
%;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
thf('3d.Point_type',type,(
    '3d.Point': $tType )).

%----shapes in R^2 or R^3 or C
thf('3d.Shape_type',type,(
    '3d.Shape': $tType )).

%----angles of the shape angle(A,B,C)
thf('3d.Angle_type',type,(
    '3d.Angle': $tType )).

thf('3d.Vector_type',type,(
    '3d.Vector': $tType )).

%----trivially true for any Shape
thf('3d.is-shape/1_type',type,(
    '3d.is-shape/1': '3d.Shape' > $o )).

thf('3d.coordinate-list-of/1_type',type,(
    '3d.coordinate-list-of/1': '3d.Point' > ( 'ListOf' @ $real ) )).

%----equidistant(A,B,C) <-> the lengths AC and BC are equal
thf('3d.equidistant/3_type',type,(
    '3d.equidistant/3': '3d.Point' > '3d.Point' > '3d.Point' > $o )).

%----equidistant(list, A) <-> all the distances between members of list and A are equal
thf('3d.equidistant/2_type',type,(
    '3d.equidistant/2': ( 'ListOf' @ '3d.Point' ) > '3d.Point' > $o )).

%-------------------------------------------------------------------------------
%----Vectors & Matrices
%-------------------------------------------------------------------------------
%----Matrices
thf('3d.Matrix_type',type,(
    '3d.Matrix': $tType )).

%----trivially true for any vectors
thf('3d.is-vector/1_type',type,(
    '3d.is-vector/1': '3d.Vector' > $o )).

%----zero vector
thf('3d.zero-vector/0_type',type,(
    '3d.zero-vector/0': '3d.Vector' )).

%----component-list-of(v) = the list of the x- and y- (and z-) components of v
thf('3d.component-list-of/1_type',type,(
    '3d.component-list-of/1': '3d.Vector' > ( 'ListOf' @ $real ) )).

%----vec(A,B) = the vector from A to B
thf('3d.vec/2_type',type,(
    '3d.vec/2': '3d.Point' > '3d.Point' > '3d.Vector' )).

%----vec->point(v) = the vector (x,y) is translated to the point (x,y)
thf('3d.vec->point/1_type',type,(
    '3d.vec->point/1': '3d.Vector' > '3d.Point' )).

%----v+(u,v) = the sum of vectors u and v
thf('3d.v+/2_type',type,(
    '3d.v+/2': '3d.Vector' > '3d.Vector' > '3d.Vector' )).

%----vec-translate(p,v) = 
thf('3d.vec-translate/2_type',type,(
    '3d.vec-translate/2': '3d.Point' > '3d.Vector' > '3d.Point' )).

%----v-sum(list) = the sum of vectors in list
thf('3d.v-sum/1_type',type,(
    '3d.v-sum/1': ( 'ListOf' @ '3d.Vector' ) > '3d.Vector' )).

%----v-(u) = -1 * u
thf('3d.v-/1_type',type,(
    '3d.v-/1': '3d.Vector' > '3d.Vector' )).

%----v-(u,v) = the difference of vectors u and v
thf('3d.v-/2_type',type,(
    '3d.v-/2': '3d.Vector' > '3d.Vector' > '3d.Vector' )).

%----sv*(a,v) = the scalar product of a and vector v
thf('3d.sv*/2_type',type,(
    '3d.sv*/2': $real > '3d.Vector' > '3d.Vector' )).

%----inner-prod(u,v) = the inner product of u and v
thf('3d.inner-prod/2_type',type,(
    '3d.inner-prod/2': '3d.Vector' > '3d.Vector' > $real )).

%----angle-of-vectors(u,v) = the formed angle of u and v
thf('3d.angle-of-vectors/2_type',type,(
    '3d.angle-of-vectors/2': '3d.Vector' > '3d.Vector' > '3d.Angle' )).

%----vec-perpendicular(u,v) <-> vectors u and v are perpendicular
thf('3d.vec-perpendicular/2_type',type,(
    '3d.vec-perpendicular/2': '3d.Vector' > '3d.Vector' > $o )).

%----vec-parallel(u,v) <-> vectors u and v are parallel
thf('3d.vec-parallel/2_type',type,(
    '3d.vec-parallel/2': '3d.Vector' > '3d.Vector' > $o )).

%----vec-same-direction(u,v) <-> vectors u and v have the same direction i.e. u and v are parallel and their inner product is positive
thf('3d.vec-same-direction/2_type',type,(
    '3d.vec-same-direction/2': '3d.Vector' > '3d.Vector' > $o )).

%----vec-opp-direction(u,v) <-> vectors u and v have the opposite direction i.e. u and v are parallel and their inner product is negative
thf('3d.vec-opp-direction/2_type',type,(
    '3d.vec-opp-direction/2': '3d.Vector' > '3d.Vector' > $o )).

%----is-unit-vec(v) <-> the magnitude of v is 1
thf('3d.is-unit-vec/1_type',type,(
    '3d.is-unit-vec/1': '3d.Vector' > $o )).

%----normalize(v) <-> the vector of the magnitude 1 and of the same direction
thf('3d.normalize/1_type',type,(
    '3d.normalize/1': '3d.Vector' > '3d.Vector' )).

%----m+(u,v) = the sum of matrices u and v
thf('3d.m+/2_type',type,(
    '3d.m+/2': '3d.Matrix' > '3d.Matrix' > '3d.Matrix' )).

%----m-sum(list) = the sum of matrices in list
thf('3d.m-sum/1_type',type,(
    '3d.m-sum/1': ( 'ListOf' @ '3d.Matrix' ) > '3d.Matrix' )).

%----m-(A,B) = the difference of matrices A and B
thf('3d.m-/2_type',type,(
    '3d.m-/2': '3d.Matrix' > '3d.Matrix' > '3d.Matrix' )).

%----m-(A) = the negation of matrix A
thf('3d.m-/1_type',type,(
    '3d.m-/1': '3d.Matrix' > '3d.Matrix' )).

%----sm*(a,A) = the scalar product of a and matrix A
thf('3d.sm*/2_type',type,(
    '3d.sm*/2': $real > '3d.Matrix' > '3d.Matrix' )).

%----m*(A,B) = the product of a and matrices A and B
thf('3d.m*/2_type',type,(
    '3d.m*/2': '3d.Matrix' > '3d.Matrix' > '3d.Matrix' )).

%----m-prod(list) = the product of matrices in list
thf('3d.m-prod/1_type',type,(
    '3d.m-prod/1': ( 'ListOf' @ '3d.Matrix' ) > '3d.Matrix' )).

%----mv*(A,v) = the product of matrix A and vector v
thf('3d.mv*/2_type',type,(
    '3d.mv*/2': '3d.Matrix' > '3d.Vector' > '3d.Vector' )).

%----m^(A,n) = the power of matrix A to n
thf('3d.m^/2_type',type,(
    '3d.m^/2': '3d.Matrix' > $int > '3d.Matrix' )).

%----identity-matrix() = the identity matrix
thf('3d.identity-matrix/0_type',type,(
    '3d.identity-matrix/0': '3d.Matrix' )).

%----zero-matrix() = the zero matrix
thf('3d.zero-matrix/0_type',type,(
    '3d.zero-matrix/0': '3d.Matrix' )).

%----det(A) = the determinant of matrix A
thf('3d.det/1_type',type,(
    '3d.det/1': '3d.Matrix' > $real )).

%----mat-shape*(A, shape) = the image of linear map A of shape
thf('3d.mat-shape*/2_type',type,(
    '3d.mat-shape*/2': '3d.Matrix' > '3d.Shape' > '3d.Shape' )).

%----is-non-singular(A) = A is a regular matrix
thf('3d.is-non-singular/1_type',type,(
    '3d.is-non-singular/1': '3d.Matrix' > $o )).

%----inverse-of(A) = the inverse matrix of A
%----works correctly for only regular matrices
thf('3d.inverse-of/1_type',type,(
    '3d.inverse-of/1': '3d.Matrix' > '3d.Matrix' )).

%----is-inverse-of(A,B) <-> B is the inverse matrix of A
thf('3d.is-inverse-of/2_type',type,(
    '3d.is-inverse-of/2': '3d.Matrix' > '3d.Matrix' > $o )).

%----trivially true for any Matrix
thf('3d.is-matrix/1_type',type,(
    '3d.is-matrix/1': '3d.Matrix' > $o )).

%----transposed-matrix(A) = the transposed matrix of A
thf('3d.transposed-matrix/1_type',type,(
    '3d.transposed-matrix/1': '3d.Matrix' > '3d.Matrix' )).

%----is-orthogonal-matrix(A) <-> A is an orthogonal matrix
thf('3d.is-orthogonal-matrix/1_type',type,(
    '3d.is-orthogonal-matrix/1': '3d.Matrix' > $o )).

%-------------------------------------------------------------------------------
%----Angle
%-------------------------------------------------------------------------------
%----angle constructor
thf('3d.angle/3_type',type,(
    '3d.angle/3': '3d.Point' > '3d.Point' > '3d.Point' > '3d.Angle' )).

%----non-degenerated condition:
%----(angle-type (angle P Q R)) <=> P != Q & Q != R
thf('3d.angle-type/1_type',type,(
    '3d.angle-type/1': '3d.Angle' > $o )).

%----cos-of-angle(a) = the cosine of the degree of a
thf('3d.cos-of-angle/1_type',type,(
    '3d.cos-of-angle/1': '3d.Angle' > $real )).

%----sin-of-angle(a) = the sine of the degree of a
thf('3d.sin-of-angle/1_type',type,(
    '3d.sin-of-angle/1': '3d.Angle' > $real )).

%----tan-of-angle(a) = the tangent of the degree of a
thf('3d.tan-of-angle/1_type',type,(
    '3d.tan-of-angle/1': '3d.Angle' > $real )).

%----rad-of-angle(a) = degree of a in radian
thf('3d.rad-of-angle/1_type',type,(
    '3d.rad-of-angle/1': '3d.Angle' > $real )).

%----formed-angle-of(shape1,shape2) = the formed angle of shape1 and shape2
thf('3d.formed-angle-of/2_type',type,(
    '3d.formed-angle-of/2': '3d.Shape' > '3d.Shape' > '3d.Angle' )).

%----same-angle(a,b) = the degrees of a and b are the same
%----remark: angle(a,b,c) = angle(A,B,C) <-> a=A, b=B, and c=C
thf('3d.same-angle/2_type',type,(
    '3d.same-angle/2': '3d.Angle' > '3d.Angle' > $o )).

%----is-right(a) = a is the right angle
thf('3d.is-right/1_type',type,(
    '3d.is-right/1': '3d.Angle' > $o )).

%----is-acute(a) = a is an acute angle
thf('3d.is-acute/1_type',type,(
    '3d.is-acute/1': '3d.Angle' > $o )).

%----is-obtuse(a) = a is an obtuse angle
thf('3d.is-obtuse/1_type',type,(
    '3d.is-obtuse/1': '3d.Angle' > $o )).

%----trivially true for any Angle
thf('3d.is-angle/1_type',type,(
    '3d.is-angle/1': '3d.Angle' > $o )).

%----is-interior-angle(a,shape) <-> a is an interior angle of shape
%----effective only if shape is a triangle or a square
thf('3d.is-interior-angle/2_type',type,(
    '3d.is-interior-angle/2': '3d.Angle' > '3d.Shape' > $o )).

%----are-interior-angles(angles,shape) <-> angles are the interior angles of shape
thf('3d.are-interior-angles/2_type',type,(
    '3d.are-interior-angles/2': ( 'ListOf' @ '3d.Angle' ) > '3d.Shape' > $o )).

%----is-angle-bisector(line, a) <-> line is the angle bisector of a
thf('3d.is-angle-bisector/2_type',type,(
    '3d.is-angle-bisector/2': '3d.Shape' > '3d.Angle' > $o )).

%----is-normal-vector-of(v,shape) <-> v is a normal vector of shape
%----effective only if shape is a line or a plane
thf('3d.is-normal-vector-of/2_type',type,(
    '3d.is-normal-vector-of/2': '3d.Vector' > '3d.Shape' > $o )).

%----normal-vector-of(shape) = a normal vector of shape
%----effective only if shape is a plane
thf('3d.normal-vector-of/1_type',type,(
    '3d.normal-vector-of/1': '3d.Shape' > '3d.Vector' )).

%----normal-vector-to(shape, p) = the normal vector of shape from a point on shape to p
%----effective only if shape is a line or a plane
thf('3d.normal-vector-to/2_type',type,(
    '3d.normal-vector-to/2': '3d.Shape' > '3d.Point' > '3d.Vector' )).

%----lines-intersect-at(list, p) <-> p is on all lines in list
thf('3d.lines-intersect-at/2_type',type,(
    '3d.lines-intersect-at/2': ( 'ListOf' @ '3d.Shape' ) > '3d.Point' > $o )).

%----lines-intersect-at-one(list) <-> there is a point on all lines in list
thf('3d.lines-intersect-at-one/1_type',type,(
    '3d.lines-intersect-at-one/1': ( 'ListOf' @ '3d.Shape' ) > $o )).

%----is-diameter-of(seg,shape) <-> seg is a diameter of shape
%----effective only if shape is a circle, a disk, or a sphere
thf('3d.is-diameter-of/2_type',type,(
    '3d.is-diameter-of/2': '3d.Shape' > '3d.Shape' > $o )).

%----direction-vec(line) = a direction vector of line
thf('3d.direction-vec/1_type',type,(
    '3d.direction-vec/1': '3d.Shape' > '3d.Vector' )).

%----is-perp-bisector(line,seg) <-> line is an perpendicular bisector of seg
thf('3d.is-perp-bisector/2_type',type,(
    '3d.is-perp-bisector/2': '3d.Shape' > '3d.Shape' > $o )).

%----divided-region-including(shape, p) = the region divided by shape including p
%----effective only if shape is a line or a plane
thf('3d.divided-region-including/2_type',type,(
    '3d.divided-region-including/2': '3d.Shape' > '3d.Point' > '3d.Shape' )).

%----exterior-angle-of(angle(A,B,C)) = an exterior angle of angle ABC
thf('3d.exterior-angle-of/1_type',type,(
    '3d.exterior-angle-of/1': '3d.Angle' > '3d.Angle' )).

%----is-vertex-of(p, shape) <-> p is a vertex of shape
thf('3d.is-vertex-of/2_type',type,(
    '3d.is-vertex-of/2': '3d.Point' > '3d.Shape' > $o )).

%----are-vertices-of(list,shape) <-> list enumerates all vertices of shape
thf('3d.are-vertices-of/2_type',type,(
    '3d.are-vertices-of/2': ( 'ListOf' @ '3d.Point' ) > '3d.Shape' > $o )).

%----triangle-opposite(T,p,s) <-> vertex p is opposite from side s in triangle T
thf('3d.triangle-opposite/3_type',type,(
    '3d.triangle-opposite/3': '3d.Shape' > '3d.Point' > '3d.Shape' > $o )).

%----triangle-opposite-angle(T,a,s) <-> angle a is opposite from side s in triangle T
thf('3d.triangle-opposite-angle/3_type',type,(
    '3d.triangle-opposite-angle/3': '3d.Shape' > '3d.Angle' > '3d.Shape' > $o )).

%----is-incenter-of(p,T) <-> p is the incenter of triangle T
thf('3d.is-incenter-of/2_type',type,(
    '3d.is-incenter-of/2': '3d.Point' > '3d.Shape' > $o )).

%----is-circumcenter-of(p,T) <-> p is the circumcenter of triangle T
thf('3d.is-circumcenter-of/2_type',type,(
    '3d.is-circumcenter-of/2': '3d.Point' > '3d.Shape' > $o )).

%----is-orthocenter-of(p,T) <-> p is the orthocenter of triangle T
thf('3d.is-orthocenter-of/2_type',type,(
    '3d.is-orthocenter-of/2': '3d.Point' > '3d.Shape' > $o )).

%----is-center-of-gravity-of(p,T) <-> p is the center of gravity of triangle T
thf('3d.is-center-of-gravity-of/2_type',type,(
    '3d.is-center-of-gravity-of/2': '3d.Point' > '3d.Shape' > $o )).

%----is-diagonal-of(seg,S) <-> seg is a diagonal of square S
thf('3d.is-diagonal-of/2_type',type,(
    '3d.is-diagonal-of/2': '3d.Shape' > '3d.Shape' > $o )).

%----square-opposite-side(S,s1,s2) <-> side s1 is opposite from side s2 in square S
thf('3d.square-opposite-side/3_type',type,(
    '3d.square-opposite-side/3': '3d.Shape' > '3d.Shape' > '3d.Shape' > $o )).

%----square-opposite-angle(S,a1,a2) <-> angle a1 is opposite from angle a2 in square S
thf('3d.square-opposite-angle/3_type',type,(
    '3d.square-opposite-angle/3': '3d.Shape' > '3d.Angle' > '3d.Angle' > $o )).

%----arc(c,p,q) = the arc of which center is c, and initial point p, and end point q
%----effective only if the lengths cp and cq are equal
%----arc(c,p,q) represents the minor arc pq by default
thf('3d.arc/3_type',type,(
    '3d.arc/3': '3d.Point' > '3d.Point' > '3d.Point' > '3d.Shape' )).

%----major-arc(arc(c,p,q)) = the major arc of which center is c, and initial point p, and end point q
%----effective only if the lengths cp and cq are equal
thf('3d.major-arc/1_type',type,(
    '3d.major-arc/1': '3d.Shape' > '3d.Shape' )).

%----minor-arc(arc(c,p,q)) = the minor arc of which center is c, and initial point p, and end point q
%----effective only if the lengths cp and cq are equal
thf('3d.minor-arc/1_type',type,(
    '3d.minor-arc/1': '3d.Shape' > '3d.Shape' )).

%----arc-ini-point(arc) = the initial point of arc
thf('3d.arc-ini-point/1_type',type,(
    '3d.arc-ini-point/1': '3d.Shape' > '3d.Point' )).

%----arc-end-point(arc) = the end point of arc
thf('3d.arc-end-point/1_type',type,(
    '3d.arc-end-point/1': '3d.Shape' > '3d.Point' )).

%----is-arc-node(p,arc) <-> p is either the initial point or the end point of arc
thf('3d.is-arc-node/2_type',type,(
    '3d.is-arc-node/2': '3d.Point' > '3d.Shape' > $o )).

%----chord-of-arc(arc) = the chord of arc
thf('3d.chord-of-arc/1_type',type,(
    '3d.chord-of-arc/1': '3d.Shape' > '3d.Shape' )).

%----arc-central-angle(arc) = the central angle of arc
thf('3d.arc-central-angle/1_type',type,(
    '3d.arc-central-angle/1': '3d.Shape' > $real )).

%----arc-inscribed-angle(arc) = the inscribed angle of arc
thf('3d.arc-inscribed-angle/1_type',type,(
    '3d.arc-inscribed-angle/1': '3d.Shape' > $real )).

%----circular-sector-ini-point(sector) = the initial point of sector
thf('3d.circular-sector-ini-point/1_type',type,(
    '3d.circular-sector-ini-point/1': '3d.Shape' > '3d.Point' )).

%----circular-sector-end-point(sector) = the end point of sector
thf('3d.circular-sector-end-point/1_type',type,(
    '3d.circular-sector-end-point/1': '3d.Shape' > '3d.Point' )).

%----is-circular-sector-node(sector) = p is either the initial point or the end point of sector
thf('3d.is-circular-sector-node/2_type',type,(
    '3d.is-circular-sector-node/2': '3d.Point' > '3d.Shape' > $o )).

%----chord-of-circular-sector(sector) = the chord of sector
thf('3d.chord-of-circular-sector/1_type',type,(
    '3d.chord-of-circular-sector/1': '3d.Shape' > '3d.Shape' )).

%----circular-sector-central-angle(sector) = the central angle of sector
thf('3d.circular-sector-central-angle/1_type',type,(
    '3d.circular-sector-central-angle/1': '3d.Shape' > $real )).

%----circular-sector-inscribed-angle(sector) = the inscribed angle of arc
thf('3d.circular-sector-inscribed-angle/1_type',type,(
    '3d.circular-sector-inscribed-angle/1': '3d.Shape' > $real )).

%----arc-of(s) = the arc of circular sector s
thf('3d.arc-of/1_type',type,(
    '3d.arc-of/1': '3d.Shape' > '3d.Shape' )).

%----line(p,q) = the line passing through p and q
thf('3d.line/2_type',type,(
    '3d.line/2': '3d.Point' > '3d.Point' > '3d.Shape' )).

%----seg(p,q) = the segment from p to q
thf('3d.seg/2_type',type,(
    '3d.seg/2': '3d.Point' > '3d.Point' > '3d.Shape' )).

%----half-line(p,q) = the half line from p passing through q
thf('3d.half-line/2_type',type,(
    '3d.half-line/2': '3d.Point' > '3d.Point' > '3d.Shape' )).

%----triangle(a,b,c) = triangle abc
thf('3d.triangle/3_type',type,(
    '3d.triangle/3': '3d.Point' > '3d.Point' > '3d.Point' > '3d.Shape' )).

%----square(a,b,c,d) = square abcd
thf('3d.square/4_type',type,(
    '3d.square/4': '3d.Point' > '3d.Point' > '3d.Point' > '3d.Point' > '3d.Shape' )).

%----polygon(list) = the polygon of which vertices are the members of list
thf('3d.polygon/1_type',type,(
    '3d.polygon/1': ( 'ListOf' @ '3d.Point' ) > '3d.Shape' )).

%----distance(p,q) = the distance between p and q
thf('3d.distance/2_type',type,(
    '3d.distance/2': '3d.Point' > '3d.Point' > $real )).

%----distance^2(p,q) = the square of the distance between p and q
thf('3d.distance^2/2_type',type,(
    '3d.distance^2/2': '3d.Point' > '3d.Point' > $real )).

%----point-shape-distance(p,shape) = the distance between p and shape
thf('3d.point-shape-distance/2_type',type,(
    '3d.point-shape-distance/2': '3d.Point' > '3d.Shape' > $real )).

%----point-shape-distance^2(p,shape) = the square of the distance between p and shape
thf('3d.point-shape-distance^2/2_type',type,(
    '3d.point-shape-distance^2/2': '3d.Point' > '3d.Shape' > $real )).

%----line-line-distance(l1,l2) = the distance between line l1 and line l2
thf('3d.line-line-distance/2_type',type,(
    '3d.line-line-distance/2': '3d.Shape' > '3d.Shape' > $real )).

%----line-line-distance^2(l1,l2) = the square of the distance between line l1 and line l2
thf('3d.line-line-distance^2/2_type',type,(
    '3d.line-line-distance^2/2': '3d.Shape' > '3d.Shape' > $real )).

%----shape-shape-distance(shape1,shape2) = the distance between shape1 and shape2
%----effective only if shape1 and shape2 are both either a line or a plane
thf('3d.shape-shape-distance/2_type',type,(
    '3d.shape-shape-distance/2': '3d.Shape' > '3d.Shape' > $real )).

%----shape-shape-distance^2(shape1,shape2) = the square of the distance between shape1 and shape2
%----effective only if shape1 and shape2 are both either a line or a plane
thf('3d.shape-shape-distance^2/2_type',type,(
    '3d.shape-shape-distance^2/2': '3d.Shape' > '3d.Shape' > $real )).

%----area-of(shape) = the area of shape
thf('3d.area-of/1_type',type,(
    '3d.area-of/1': '3d.Shape' > $real )).

%----centroid-of(T) = the center of gravity of triangle T
thf('3d.centroid-of/1_type',type,(
    '3d.centroid-of/1': '3d.Shape' > '3d.Point' )).

%----radius(v) = the magnitude of v
thf('3d.radius/1_type',type,(
    '3d.radius/1': '3d.Vector' > $real )).

%----radius^2(v) = the square of the magnitude of v
thf('3d.radius^2/1_type',type,(
    '3d.radius^2/1': '3d.Vector' > $real )).

%----length-of(shape) = the length of shape
%----effective only if shape is a circle, an arc, a segment, a triangle, a square, or a polygon
thf('3d.length-of/1_type',type,(
    '3d.length-of/1': '3d.Shape' > $real )).

%----midpoint-of(p,q) = the midpoint of p and q
thf('3d.midpoint-of/2_type',type,(
    '3d.midpoint-of/2': '3d.Point' > '3d.Point' > '3d.Point' )).

%----internally-dividing-point(p,q,r) = the point that divides segment pq internally in the ratio of r:1-r
thf('3d.internally-dividing-point/3_type',type,(
    '3d.internally-dividing-point/3': '3d.Point' > '3d.Point' > $real > '3d.Point' )).

%----center-of(shape) = the center of shape
%----effective only if shape is a circle, a disk, an arc, a circular sector, a semicircle, or a sphere
thf('3d.center-of/1_type',type,(
    '3d.center-of/1': '3d.Shape' > '3d.Point' )).

%----radius-of(shape) = the radius of shape
%----effective only if shape is a circle, a disk, an arc, a circular sector, a semicircle, or a sphere
thf('3d.radius-of/1_type',type,(
    '3d.radius-of/1': '3d.Shape' > $real )).

%----seg-midpoint-of(seg) = the midpoint of segment seg
thf('3d.seg-midpoint-of/1_type',type,(
    '3d.seg-midpoint-of/1': '3d.Shape' > '3d.Point' )).

%----seg-extension-of(seg) = the line including seg
thf('3d.seg-extention-of/1_type',type,(
    '3d.seg-extention-of/1': '3d.Shape' > '3d.Shape' )).

%----half-line-extension-of(h) = the line including half line h
thf('3d.half-line-extension-of/1_type',type,(
    '3d.half-line-extension-of/1': '3d.Shape' > '3d.Shape' )).

thf('3d.end-points-of/1_type',type,(
    '3d.end-points-of/1': '3d.Shape' > ( 'ListOf' @ '3d.Point' ) )).

%----is-end-point-of(p,s) <-> p is an end point of s
%----effective only if s is a segment or a half line
thf('3d.is-end-point-of/2_type',type,(
    '3d.is-end-point-of/2': '3d.Point' > '3d.Shape' > $o )).

%----vertices-of(shape) = the list of vertices of shape
thf('3d.vertices-of/1_type',type,(
    '3d.vertices-of/1': '3d.Shape' > ( 'ListOf' @ '3d.Point' ) )).

%----opposite-vertice-of(s,S) = a vetex of S that is not a vertex of side/face s
%----effective only if used as follows:
%----opposite-vertice-of(side, polygon), where member(side (sides-of polygon)) holds, or
%----opposite-vertice-of(face, polyhedron), where member(face (faces-of polyhedron)) holds
thf('3d.opposite-vertice-of/2_type',type,(
    '3d.opposite-vertice-of/2': '3d.Shape' > '3d.Shape' > '3d.Point' )).

%----extend-to-plane(shape) = the plane that contains shape
thf('3d.extend-to-plane/1_type',type,(
    '3d.extend-to-plane/1': '3d.Shape' > '3d.Shape' )).

%----local-system-of(arc, [v1,v2(,v3)]) = the orthogonal coordinate system [v1,v2(,v3)] of which v1 is a unit vector parallel to the vector from the center of arc and the initial point of arc
thf('3d.local-system-of/1_type',type,(
    '3d.local-system-of/1': '3d.Shape' > ( 'ListOf' @ '3d.Vector' ) )).

%----two-sides-of-rectangle(PQRS) = the pair of the sides PQ and QR of square PQRS
thf('3d.two-sides-of-rectangle/1_type',type,(
    '3d.two-sides-of-rectangle/1': '3d.Shape' > ( 'Pair' @ '3d.Shape' @ '3d.Shape' ) )).

%----shape-inside-of(shape) = the shape of the inner part of shape
thf('3d.shape-inside-of/1_type',type,(
    '3d.shape-inside-of/1': '3d.Shape' > '3d.Shape' )).

%----shape-inside-of(shape) = the shape of the outer part of shape
thf('3d.shape-outside-of/1_type',type,(
    '3d.shape-outside-of/1': '3d.Shape' > '3d.Shape' )).

%----inner-part-of(shape) = the shape of the inner part of shape
thf('3d.inner-part-of/1_type',type,(
    '3d.inner-part-of/1': '3d.Shape' > '3d.Shape' )).

%----with-boundary(shape) = the shape of the inner part and the boundary of shape
thf('3d.with-boundary/1_type',type,(
    '3d.with-boundary/1': '3d.Shape' > '3d.Shape' )).

%----boundary-of(shape) = the shape of the boundary of shape
thf('3d.boundary-of/1_type',type,(
    '3d.boundary-of/1': '3d.Shape' > '3d.Shape' )).

%----foot-of-perpendicular-line-from-to(p,shape) = the foot of the perpendicular line from p to shape
%----effective only if shape is a line or a plane
thf('3d.foot-of-perpendicular-line-from-to/2_type',type,(
    '3d.foot-of-perpendicular-line-from-to/2': '3d.Point' > '3d.Shape' > '3d.Point' )).

%----origin() = the origin
thf('3d.origin/0_type',type,(
    '3d.origin/0': '3d.Point' )).

%----x-axis() = the x-axis
thf('3d.x-axis/0_type',type,(
    '3d.x-axis/0': '3d.Shape' )).

%----y-axis() = the y-axis
thf('3d.y-axis/0_type',type,(
    '3d.y-axis/0': '3d.Shape' )).

thf('3d.xy-plane/0_type',type,(
    '3d.xy-plane/0': '3d.Shape' )).

%----is-empty(shape) <-> shape is empty
thf('3d.is-empty/1_type',type,(
    '3d.is-empty/1': '3d.Shape' > $o )).

%----on(p,shape) <-> p is on shape
thf('3d.on/2_type',type,(
    '3d.on/2': '3d.Point' > '3d.Shape' > $o )).

%----perpendicular(s1,s2) <-> s1 and s2 are perpendicular
thf('3d.perpendicular/2_type',type,(
    '3d.perpendicular/2': '3d.Shape' > '3d.Shape' > $o )).

%----parallel(s1,s2) <-> s1 and s2 are parallel
thf('3d.parallel/2_type',type,(
    '3d.parallel/2': '3d.Shape' > '3d.Shape' > $o )).

%----colinear(p,q,r) <-> three points p, q, r are on the line
thf('3d.colinear/3_type',type,(
    '3d.colinear/3': '3d.Point' > '3d.Point' > '3d.Point' > $o )).

%----points-colinear(list) <-> all points in list are on the line
thf('3d.points-colinear/1_type',type,(
    '3d.points-colinear/1': ( 'ListOf' @ '3d.Point' ) > $o )).

%----coplanar(p,q,r,s) <-> four points p, q, r, s are on the plane
thf('3d.coplanar/4_type',type,(
    '3d.coplanar/4': '3d.Point' > '3d.Point' > '3d.Point' > '3d.Point' > $o )).

%----points-coplanar(list) <-> all points in list are on the same plane
thf('3d.points-coplanar/1_type',type,(
    '3d.points-coplanar/1': ( 'ListOf' @ '3d.Point' ) > $o )).

%----points-with-equal-interval([p1,...,pn]) = the distances p1p2, ..., pnp1 are equal
thf('3d.points-with-equal-interval/1_type',type,(
    '3d.points-with-equal-interval/1': ( 'ListOf' @ '3d.Point' ) > $o )).

%----points-bending-by-equal-angle([p1,...,pn]) = the angles pnp1p2, ..., pn-1pnp1 are equal
thf('3d.points-bending-by-equal-angle/1_type',type,(
    '3d.points-bending-by-equal-angle/1': ( 'ListOf' @ '3d.Point' ) > $o )).

%----points-bending-to-same-side([p1,...,pn]) = the outer products of vectors (pipi+1 x pi+1pi+2) are of the same direction for all 1<=i<=n ,where pn+i=pi
thf('3d.points-bending-to-same-side/1_type',type,(
    '3d.points-bending-to-same-side/1': ( 'ListOf' @ '3d.Point' ) > $o )).

%----point-inside-of(p,shape) <-> p is a point inside of shape
thf('3d.point-inside-of/2_type',type,(
    '3d.point-inside-of/2': '3d.Point' > '3d.Shape' > $o )).

%----inside-of(shape1,shape2) <-> shape1 is contained by the inside of shape2
thf('3d.inside-of/2_type',type,(
    '3d.inside-of/2': '3d.Shape' > '3d.Shape' > $o )).

%----point-outside-of(p,shape) <-> p is a point outside of shape
thf('3d.point-outside-of/2_type',type,(
    '3d.point-outside-of/2': '3d.Point' > '3d.Shape' > $o )).

%----outside-of(shape1,shape2) <-> shape1 is contained by the outside of shape2
thf('3d.outside-of/2_type',type,(
    '3d.outside-of/2': '3d.Shape' > '3d.Shape' > $o )).

%----is-triangle(p,q,r) <-> three points p, q, r form a triangle
thf('3d.is-triangle/3_type',type,(
    '3d.is-triangle/3': '3d.Point' > '3d.Point' > '3d.Point' > $o )).

%----is-right-triangle(p,q,r) <-> three points p, q, r form a right triangle
thf('3d.is-right-triangle/3_type',type,(
    '3d.is-right-triangle/3': '3d.Point' > '3d.Point' > '3d.Point' > $o )).

%----is-right-triangle(T) <-> T is a right triangle
thf('3d.is-right-triangle/1_type',type,(
    '3d.is-right-triangle/1': '3d.Shape' > $o )).

%----is-isosceles-triangle(p,q,r) <-> three points p, q, r form an isosceles triangle
thf('3d.is-isosceles-triangle/3_type',type,(
    '3d.is-isosceles-triangle/3': '3d.Point' > '3d.Point' > '3d.Point' > $o )).

%----is-isosceles-triangle(T) <-> T is an isosceles triangle
thf('3d.is-isosceles-triangle/1_type',type,(
    '3d.is-isosceles-triangle/1': '3d.Shape' > $o )).

%----is-acute-triangle(p,q,r) <-> three points p, q, r form an acute triangle
thf('3d.is-acute-triangle/3_type',type,(
    '3d.is-acute-triangle/3': '3d.Point' > '3d.Point' > '3d.Point' > $o )).

%----is-acute-triangle(T) <-> T is an acute triangle
thf('3d.is-acute-triangle/1_type',type,(
    '3d.is-acute-triangle/1': '3d.Shape' > $o )).

%----is-obtuse-triangle(p,q,r) <-> three points p, q, r form an obtuse triangle
thf('3d.is-obtuse-triangle/3_type',type,(
    '3d.is-obtuse-triangle/3': '3d.Point' > '3d.Point' > '3d.Point' > $o )).

%----is-obtuse-triangle(T) <-> T is an obtuse triangle
thf('3d.is-obtuse-triangle/1_type',type,(
    '3d.is-obtuse-triangle/1': '3d.Shape' > $o )).

%----is-equilateral-triangle(p,q,r) <-> three points p, q, r form an equilateral triangle
thf('3d.is-equilateral-triangle/3_type',type,(
    '3d.is-equilateral-triangle/3': '3d.Point' > '3d.Point' > '3d.Point' > $o )).

%----is-equilateral-triangle(T) <-> T is an equilateral triangle
thf('3d.is-equilateral-triangle/1_type',type,(
    '3d.is-equilateral-triangle/1': '3d.Shape' > $o )).

%----is-square(p,q,r,s) <-> four points p, q, r, s form a convex square
thf('3d.is-square/4_type',type,(
    '3d.is-square/4': '3d.Point' > '3d.Point' > '3d.Point' > '3d.Point' > $o )).

%----is-regular-square(p,q,r,s) <-> four points p, q, r, s form a regular square
thf('3d.is-regular-square/4_type',type,(
    '3d.is-regular-square/4': '3d.Point' > '3d.Point' > '3d.Point' > '3d.Point' > $o )).

%----is-rectangle(S) <-> S is a regular square
thf('3d.is-regular-square/1_type',type,(
    '3d.is-regular-square/1': '3d.Shape' > $o )).

%----is-rectangle(p,q,r,s) <-> four points p, q, r, s form a rectangle
thf('3d.is-rectangle/4_type',type,(
    '3d.is-rectangle/4': '3d.Point' > '3d.Point' > '3d.Point' > '3d.Point' > $o )).

%----is-rectangle(S) <-> S is a rectangle
thf('3d.is-rectangle/1_type',type,(
    '3d.is-rectangle/1': '3d.Shape' > $o )).

%----is-rhombus(p,q,r,s) <-> four points p, q, r, s form a rhombus
thf('3d.is-rhombus/4_type',type,(
    '3d.is-rhombus/4': '3d.Point' > '3d.Point' > '3d.Point' > '3d.Point' > $o )).

%----is-rhombus(S) <-> S is a rhombus
thf('3d.is-rhombus/1_type',type,(
    '3d.is-rhombus/1': '3d.Shape' > $o )).

%----is-trapezoid(p,q,r,s) <-> four points p, q, r, s form a trapezoid
thf('3d.is-trapezoid/4_type',type,(
    '3d.is-trapezoid/4': '3d.Point' > '3d.Point' > '3d.Point' > '3d.Point' > $o )).

%----is-trapezoid(S) <-> S is a trapezoid
thf('3d.is-trapezoid/1_type',type,(
    '3d.is-trapezoid/1': '3d.Shape' > $o )).

%----is-parallelogram(p,q,r,s) <-> four points p, q, r, s form a parallelogram
thf('3d.is-parallelogram/4_type',type,(
    '3d.is-parallelogram/4': '3d.Point' > '3d.Point' > '3d.Point' > '3d.Point' > $o )).

%----is-parallelogram(S) <-> S is a parallelogram
thf('3d.is-parallelogram/1_type',type,(
    '3d.is-parallelogram/1': '3d.Shape' > $o )).

%----is-polygon(list) <-> the points in list form a polygon
thf('3d.is-polygon/1_type',type,(
    '3d.is-polygon/1': ( 'ListOf' @ '3d.Point' ) > $o )).

%----is-regular-polygon(S) <-> S is a regular polygon
thf('3d.is-regular-polygon/1_type',type,(
    '3d.is-regular-polygon/1': '3d.Shape' > $o )).

%----is-convex-shape(S) <-> S is a convex shape
%----effective only if S is a polygon
thf('3d.is-convex-shape/1_type',type,(
    '3d.is-convex-shape/1': '3d.Shape' > $o )).

%----tangent(shape1,shape2,p) <-> shape1 is tangent to shape2 at p
thf('3d.tangent/3_type',type,(
    '3d.tangent/3': '3d.Shape' > '3d.Shape' > '3d.Point' > $o )).

%----tangent(shape1,shape2,p) <-> shape1 is tangent to shape2 at some point
thf('3d.tangent/2_type',type,(
    '3d.tangent/2': '3d.Shape' > '3d.Shape' > $o )).

%----tangent-to-all(shape, list) <-> shape is tangent to all shapes in list
thf('3d.tangent-to-all/2_type',type,(
    '3d.tangent-to-all/2': '3d.Shape' > ( 'ListOf' @ '3d.Shape' ) > $o )).

%----normal-line(line, curve, p) <-> line is the normal line of curve at p
thf('3d.normal-line/3_type',type,(
    '3d.normal-line/3': '3d.Shape' > '3d.Shape' > '3d.Point' > $o )).

%----translate(shape1,v,a,shape2) <-> shape1 coincides shape2 by parallel shift by av
thf('3d.translate/4_type',type,(
    '3d.translate/4': '3d.Shape' > '3d.Vector' > $real > '3d.Shape' > $o )).

%----translate(shape,v) <-> the shape which is shape shifted by v
thf('3d.translate/2_type',type,(
    '3d.translate/2': '3d.Shape' > '3d.Vector' > '3d.Shape' )).

%----intersect(shape1, shape2, p) <-> shape1 intersects shape2 at p
thf('3d.intersect/3_type',type,(
    '3d.intersect/3': '3d.Shape' > '3d.Shape' > '3d.Point' > $o )).

%----intersect(shape1, shape2) <-> shape1 intersects shape2 at some point
thf('3d.intersect/2_type',type,(
    '3d.intersect/2': '3d.Shape' > '3d.Shape' > $o )).

%----are-intersection-points-of([a1,...,am], [s1,...,sn]) <-> list of points [a1,...,am] enumarates all the points of the intersection of si's
thf('3d.are-intersection-points-of/2_type',type,(
    '3d.are-intersection-points-of/2': ( 'ListOf' @ '3d.Point' ) > ( 'ListOf' @ '3d.Shape' ) > $o )).

%----is-inscribed-in(shape1,shape2) <-> shape1 is inscribed in shape2
thf('3d.is-inscribed-in/2_type',type,(
    '3d.is-inscribed-in/2': '3d.Shape' > '3d.Shape' > $o )).

%----is-circumscribed-about(shape1,shape2) <-> shape1 is circumscribed about shape2
%----effective only if shape1 and shape2 are circles
thf('3d.is-circumscribed-about/2_type',type,(
    '3d.is-circumscribed-about/2': '3d.Shape' > '3d.Shape' > $o )).

%----similar(shape1,shape2) <-> shape1 and shape2 are similar
thf('3d.similar/2_type',type,(
    '3d.similar/2': '3d.Shape' > '3d.Shape' > $o )).

%----ordered-similar(shape1,shape2) <-> shape1 and shape2 are similar in the given order of vertices
%----effective only if shape1 and shape2 are both triangles or squares
thf('3d.ordered-similar/2_type',type,(
    '3d.ordered-similar/2': '3d.Shape' > '3d.Shape' > $o )).

%----congruent(shape1,shape2) <-> shape1 and shape2 are congruent
thf('3d.congruent/2_type',type,(
    '3d.congruent/2': '3d.Shape' > '3d.Shape' > $o )).

%----ordered-congruent(shape1,shape2) <-> shape1 and shape2 are congruent in the given order of vertices
%----effective only if shape1 and shape2 are both triangles or squares
thf('3d.ordered-congruent/2_type',type,(
    '3d.ordered-congruent/2': '3d.Shape' > '3d.Shape' > $o )).

%----divide-internally(p,seg,r1,r2) <-> p divides seg internally in the ratio r1:r2
thf('3d.divide-internally/4_type',type,(
    '3d.divide-internally/4': '3d.Point' > '3d.Shape' > $real > $real > $o )).

%----divide-externally(p,seg,r1,r2) <-> p divides seg externally in the ratio r1:r2
thf('3d.divide-externally/4_type',type,(
    '3d.divide-externally/4': '3d.Point' > '3d.Shape' > $real > $real > $o )).

%----determine(list, shape) <-> shape is determined by list
%----effective only if list consists of three points and shape is a plane
thf('3d.determine/2_type',type,(
    '3d.determine/2': ( 'ListOf' @ '3d.Point' ) > '3d.Shape' > $o )).

%----form(list,shape) <-> the points in list form shape
%----effective only if list consists of three points and shape is a triangle
thf('3d.form/2_type',type,(
    '3d.form/2': ( 'ListOf' @ '3d.Point' ) > '3d.Shape' > $o )).

%----form-by-shapes(list,shape) <-> the shapes in list form shape
%----effective only if list consists of three lines and shape is a triangle
thf('3d.form-by-shapes/2_type',type,(
    '3d.form-by-shapes/2': ( 'ListOf' @ '3d.Shape' ) > '3d.Shape' > $o )).

%----point-symmetry(p1,p2,q) <-> p1 and p2 are symmetric with respect to point q
thf('3d.point-symmetry/3_type',type,(
    '3d.point-symmetry/3': '3d.Point' > '3d.Point' > '3d.Point' > $o )).

%----point-symmetry-shape(shape,p) <-> shape is symmetric with respect to point p
thf('3d.point-symmetry-shape/2_type',type,(
    '3d.point-symmetry-shape/2': '3d.Shape' > '3d.Point' > $o )).

%----point-symmetry-shapes(shape1,shape2,p) <-> shape1 and shape2 are symmetric with respect to point q
thf('3d.point-symmetry-shapes/3_type',type,(
    '3d.point-symmetry-shapes/3': '3d.Shape' > '3d.Shape' > '3d.Point' > $o )).

%----line-symmetry(p1,p2,l) <-> p1 and p2 are symmetric with respect to line l
thf('3d.line-symmetry/3_type',type,(
    '3d.line-symmetry/3': '3d.Point' > '3d.Point' > '3d.Shape' > $o )).

%----line-symmetry-shape(shape,l) <-> shape is symmetric with respect to line l
thf('3d.line-symmetry-shape/2_type',type,(
    '3d.line-symmetry-shape/2': '3d.Shape' > '3d.Shape' > $o )).

%line-symmetry-shapes(shape1,shape2,l) <-> shape1 and shape2 are symmetric with respect to line l
thf('3d.line-symmetry-shapes/3_type',type,(
    '3d.line-symmetry-shapes/3': '3d.Shape' > '3d.Shape' > '3d.Shape' > $o )).

%----connect(shape,list) <-> shape connects the points in list
%----effective only if shape is a segment and list consists of two points
thf('3d.connect/2_type',type,(
    '3d.connect/2': '3d.Shape' > ( 'ListOf' @ '3d.Point' ) > $o )).

%----is-a-side-of(shape1,shape2) <-> shape1 is a side of shape2
thf('3d.is-a-side-of/2_type',type,(
    '3d.is-a-side-of/2': '3d.Shape' > '3d.Shape' > $o )).

%----are-the-sides-of(list,shape) <-> list enumerates all sides of shape
thf('3d.are-the-sides-of/2_type',type,(
    '3d.are-the-sides-of/2': ( 'ListOf' @ '3d.Shape' ) > '3d.Shape' > $o )).

%----is-base-of(shape1,shape2) <-> shape1 is the base of shape2
%----effective only if shape1 is a segment and shape2 is an isosceles triangle
thf('3d.is-base-of/2_type',type,(
    '3d.is-base-of/2': '3d.Shape' > '3d.Shape' > $o )).

%----sides-of(shape) = the list of the sides of shape
thf('3d.sides-of/1_type',type,(
    '3d.sides-of/1': '3d.Shape' > ( 'ListOf' @ '3d.Shape' ) )).

%----converge-point([an], p) <-> the sequence of points [an] converges to p
thf('3d.converge-point/2_type',type,(
    '3d.converge-point/2': ( $int > '3d.Point' ) > '3d.Point' > $o )).

%----is-interior-angle-of(a,shape) <-> a is the degree in radian of an interior angle of shape
%----effective only if shape is a triangle
thf('3d.is-interior-angle-of/2_type',type,(
    '3d.is-interior-angle-of/2': $real > '3d.Shape' > $o )).

%----are-interior-angles-of(list,shape) <-> list enumerates all the degrees in radian of interior angles of shape
%----effective only if shape is a triangle
thf('3d.are-interior-angles-of/2_type',type,(
    '3d.are-interior-angles-of/2': ( 'ListOf' @ $real ) > '3d.Shape' > $o )).

%----lines-intersect-angle(l1,l2,a) <-> l1 and l2 intersect at degree a
thf('3d.lines-intersect-angle/3_type',type,(
    '3d.lines-intersect-angle/3': '3d.Shape' > '3d.Shape' > $real > $o )).

%----convex-upward(shape) <-> shape is upward convex
thf('3d.convex-upward/1_type',type,(
    '3d.convex-upward/1': '3d.Shape' > $o )).

%----convex-downward(shape) <-> shape is downward convex
thf('3d.convex-downward/1_type',type,(
    '3d.convex-downward/1': '3d.Shape' > $o )).

%----shape-of-cpfun(phi) = the shape of which characteristic function is phi
thf('3d.shape-of-cpfun/1_type',type,(
    '3d.shape-of-cpfun/1': ( '3d.Point' > $o ) > '3d.Shape' )).

%----char-fun-of(shape) = the characteristic function of shape
thf('3d.char-fun-of/1_type',type,(
    '3d.char-fun-of/1': '3d.Shape' > '3d.Point' > $o )).

%----set-as-shape(set) = the shape of which underlying set is set
thf('3d.set-as-shape/1_type',type,(
    '3d.set-as-shape/1': ( 'SetOf' @ '3d.Point' ) > '3d.Shape' )).

%----shape-as-set(shape) = the set of points on shape
thf('3d.shape-as-set/1_type',type,(
    '3d.shape-as-set/1': '3d.Shape' > ( 'SetOf' @ '3d.Point' ) )).

%----is-opposite-of-wrt(p,q,shape) <-> p and q are on opposite sides with respect to shape
%----effective only if shape is a segment or a line
thf('3d.is-opposite-of-wrt/3_type',type,(
    '3d.is-opposite-of-wrt/3': '3d.Point' > '3d.Point' > '3d.Shape' > $o )).

%----trivially true for any Point
thf('3d.is-point/1_type',type,(
    '3d.is-point/1': '3d.Point' > $o )).

%----intersection(shape1,shape2) = the intersection of shape1 and shape2
thf('3d.intersection/2_type',type,(
    '3d.intersection/2': '3d.Shape' > '3d.Shape' > '3d.Shape' )).

%----intersection(list) = the intersection of all shapes in list
thf('3d.intersection/1_type',type,(
    '3d.intersection/1': ( 'ListOf' @ '3d.Shape' ) > '3d.Shape' )).

%----union(shape1,shape2) = the union of shape1 and shape2
thf('3d.union/2_type',type,(
    '3d.union/2': '3d.Shape' > '3d.Shape' > '3d.Shape' )).

%----union(list) = the union of all shapes in list
thf('3d.union/1_type',type,(
    '3d.union/1': ( 'ListOf' @ '3d.Shape' ) > '3d.Shape' )).

%----complement(shape) = the complement of shape in R^2 or R^3
thf('3d.complement/1_type',type,(
    '3d.complement/1': '3d.Shape' > '3d.Shape' )).

%----shape-(shape1,shape2) = the defference of shape1 and shape2
thf('3d.shape-/2_type',type,(
    '3d.shape-/2': '3d.Shape' > '3d.Shape' > '3d.Shape' )).

%----shape-enclosed-by(list) = the shape enclosed by the shapes in list
thf('3d.shape-enclosed-by/1_type',type,(
    '3d.shape-enclosed-by/1': ( 'ListOf' @ '3d.Shape' ) > '3d.Shape' )).

%----line-type(shape) <-> shape is a line
thf('3d.line-type/1_type',type,(
    '3d.line-type/1': '3d.Shape' > $o )).

%----half-line-type(shape) <-> shape is a half line
thf('3d.half-line-type/1_type',type,(
    '3d.half-line-type/1': '3d.Shape' > $o )).

%----segment-type(shape) <-> shape is a segment
thf('3d.segment-type/1_type',type,(
    '3d.segment-type/1': '3d.Shape' > $o )).

%----triangle-type(shape) <-> shape is a triangle
thf('3d.triangle-type/1_type',type,(
    '3d.triangle-type/1': '3d.Shape' > $o )).

%----equilateral-triangle-type(shape) <-> shape is an equilateral triangle
thf('3d.equilateral-triangle-type/1_type',type,(
    '3d.equilateral-triangle-type/1': '3d.Shape' > $o )).

%----acute-triangle-type(shape) <-> shape is an acute triangle
thf('3d.acute-triangle-type/1_type',type,(
    '3d.acute-triangle-type/1': '3d.Shape' > $o )).

%----right-triangle-type(shape) <-> shape is a right triangle
thf('3d.right-triangle-type/1_type',type,(
    '3d.right-triangle-type/1': '3d.Shape' > $o )).

%----obtuse-triangle-type(shape) <-> shape is a obtuse triangle
thf('3d.obtuse-triangle-type/1_type',type,(
    '3d.obtuse-triangle-type/1': '3d.Shape' > $o )).

%----isosceles-triangle-type(shape) <-> shape is an isosceles triangle
thf('3d.isosceles-triangle-type/1_type',type,(
    '3d.isosceles-triangle-type/1': '3d.Shape' > $o )).

%----square-type(shape) <-> shape is a square
thf('3d.square-type/1_type',type,(
    '3d.square-type/1': '3d.Shape' > $o )).

%----rectangle-type(shape) <-> shape is a rectangle
thf('3d.rectangle-type/1_type',type,(
    '3d.rectangle-type/1': '3d.Shape' > $o )).

%----regular-square-type(shape) <-> shape is a regular square
thf('3d.regular-square-type/1_type',type,(
    '3d.regular-square-type/1': '3d.Shape' > $o )).

%----regular-pentagon-type(shape) <-> shape is a regular pentagon
thf('3d.regular-pentagon-type/1_type',type,(
    '3d.regular-pentagon-type/1': '3d.Shape' > $o )).

%----regular-hexagon-type(shape) <-> shape is a regular hexagon
thf('3d.regular-hexagon-type/1_type',type,(
    '3d.regular-hexagon-type/1': '3d.Shape' > $o )).

%----rhombus-type(shape) <-> shape is a rhombus
thf('3d.rhombus-type/1_type',type,(
    '3d.rhombus-type/1': '3d.Shape' > $o )).

%----trapezoid-type(shape) <-> shape is a trapezoid
thf('3d.trapezoid-type/1_type',type,(
    '3d.trapezoid-type/1': '3d.Shape' > $o )).

%----parallelogram-type(shape) <-> shape is a parallelogram
thf('3d.parallelogram-type/1_type',type,(
    '3d.parallelogram-type/1': '3d.Shape' > $o )).

%----polygon-type(shape) <-> shape is a polygon
thf('3d.polygon-type/1_type',type,(
    '3d.polygon-type/1': '3d.Shape' > $o )).

%-------------------------------------------
%----Axis of coordinates (as a special object)
%-------------------------------------------
thf('3d.Axis_type',type,(
    '3d.Axis': $tType )).

thf('3d.axis-along/1_type',type,(
    '3d.axis-along/1': '3d.Vector' > '3d.Axis' )).

thf('3d.direction-of/1_type',type,(
    '3d.direction-of/1': '3d.Axis' > '3d.Vector' )).

%----point constructor
thf('3d.point/3_type',type,(
    '3d.point/3': $real > $real > $real > '3d.Point' )).

%----vec3d(a,b,c) = the vector of components a, b, and c
thf('3d.vec3d/3_type',type,(
    '3d.vec3d/3': $real > $real > $real > '3d.Vector' )).

%----outer-prod(u,v) = the outer product of u and v
thf('3d.outer-prod/2_type',type,(
    '3d.outer-prod/2': '3d.Vector' > '3d.Vector' > '3d.Vector' )).

%----x-coord(p) = the x-coordinate of p
thf('3d.x-coord/1_type',type,(
    '3d.x-coord/1': '3d.Point' > $real )).

%----u-coord(p) = the y-coordinate of p
thf('3d.y-coord/1_type',type,(
    '3d.y-coord/1': '3d.Point' > $real )).

%----z-coord(p) = the z-coordinate of p
thf('3d.z-coord/1_type',type,(
    '3d.z-coord/1': '3d.Point' > $real )).

%----x-coord(v) = the x-coordinate of v
thf('3d.vec-x-coord/1_type',type,(
    '3d.vec-x-coord/1': '3d.Vector' > $real )).

%----y-coord(v) = the y-coordinate of v
thf('3d.vec-y-coord/1_type',type,(
    '3d.vec-y-coord/1': '3d.Vector' > $real )).

%----z-coord(v) = the z-coordinate of v
thf('3d.vec-z-coord/1_type',type,(
    '3d.vec-z-coord/1': '3d.Vector' > $real )).

%----matrix(a11,a12,a13,a21,a22,a23,a31,a32,a33) = the matrix (aij)
thf('3d.matrix/9_type',type,(
    '3d.matrix/9': $real > $real > $real > $real > $real > $real > $real > $real > $real > '3d.Matrix' )).

%----matrix-by-columns(u,v,w) = the matrix (u v w)
thf('3d.matrix-by-columns/3_type',type,(
    '3d.matrix-by-columns/3': '3d.Vector' > '3d.Vector' > '3d.Vector' > '3d.Matrix' )).

%----set-of-cfun(phi(*,*,*)) = the shape of which characteristic function is phi
thf('3d.set-of-cfun/1_type',type,(
    '3d.set-of-cfun/1': ( $real > $real > $real > $o ) > '3d.Shape' )).

%----cpfun-to-cfun(phi(*)) = the formula psi of the form phi(point(x,y,z)) with variables x ,y ,and z
thf('3d.cpfun-to-cfun/1_type',type,(
    '3d.cpfun-to-cfun/1': ( '3d.Point' > $o ) > $real > $real > $real > $o )).

%----cfun-to-cpfun(phi(*,*,*)) = the formula psi of the form phi(x-coord(p), y-coord(p), z-coord(p)) with variable p
thf('3d.cfun-to-cpfun/1_type',type,(
    '3d.cfun-to-cpfun/1': ( $real > $real > $real > $o ) > '3d.Point' > $o )).

%----are-skew-lines(l1,l2) <-> l1 and l2 are skew lines
thf('3d.are-skew-lines/2_type',type,(
    '3d.are-skew-lines/2': '3d.Shape' > '3d.Shape' > $o )).

%----plane(a,b,c,d) = the plane ax + by + cz = d
thf('3d.plane/4_type',type,(
    '3d.plane/4': $real > $real > $real > $real > '3d.Shape' )).

%----plane1(p,q,r) = the plane passing through three points p, q, r
thf('3d.plane1/3_type',type,(
    '3d.plane1/3': '3d.Point' > '3d.Point' > '3d.Point' > '3d.Shape' )).

%----plane2(p,v) = the plane passing through point p and perpendicular to v
thf('3d.plane2/2_type',type,(
    '3d.plane2/2': '3d.Point' > '3d.Vector' > '3d.Shape' )).

%----plane2(plane) = plane in the expression of a point and a normal vector
%----effective only if plane is expressed by three points
thf('3d.plane2/1_type',type,(
    '3d.plane2/1': '3d.Shape' > '3d.Shape' )).

%----plane(plane) = plane in the expression of equation
%----effective only if plane is expressed by three points or by a point and a normal vector
thf('3d.plane/1_type',type,(
    '3d.plane/1': '3d.Shape' > '3d.Shape' )).

%----is-plane(p,q,r) <-> three points p, q, r determine a plane
thf('3d.is-plane/3_type',type,(
    '3d.is-plane/3': '3d.Point' > '3d.Point' > '3d.Point' > $o )).

%----is-plane(p,v) <-> point p and vector v determine a plane
thf('3d.is-plane/2_type',type,(
    '3d.is-plane/2': '3d.Point' > '3d.Vector' > $o )).

%----a-point-on(plane) = a point on plane
thf('3d.a-point-on/1_type',type,(
    '3d.a-point-on/1': '3d.Shape' > '3d.Point' )).

%----orthographic-projection(shape, plane) = the shape of the orthogonal projection of shape to plane
thf('3d.orthographic-projection/2_type',type,(
    '3d.orthographic-projection/2': '3d.Shape' > '3d.Shape' > '3d.Shape' )).

%----perpendicular-plane-including(p,shape) = the plane passing through p and perpendicular to shape
%----effective only if shape is a line
thf('3d.perpendicular-plane-including/2_type',type,(
    '3d.perpendicular-plane-including/2': '3d.Point' > '3d.Shape' > '3d.Shape' )).

%----distance-between-parallel-planes(plane1, plane 2) = the distance of plane1 and plane 2
%----effective only if plane1 and plane2 are parallel
thf('3d.distance-between-parallel-planes/2_type',type,(
    '3d.distance-between-parallel-planes/2': '3d.Shape' > '3d.Shape' > $real )).

%----distance^2-between-parallel-planes(plane1, plane 2) = the square of the distance of plane1 and plane 2
%----effective only if plane1 and plane2 are parallel
thf('3d.distance^2-between-parallel-planes/2_type',type,(
    '3d.distance^2-between-parallel-planes/2': '3d.Shape' > '3d.Shape' > $real )).

%----z-axis() = the z-axis
thf('3d.z-axis/0_type',type,(
    '3d.z-axis/0': '3d.Shape' )).

%----yz-plane() = the yz-plane
thf('3d.yz-plane/0_type',type,(
    '3d.yz-plane/0': '3d.Shape' )).

%----zx-plane() = the zx-plane
thf('3d.zx-plane/0_type',type,(
    '3d.zx-plane/0': '3d.Shape' )).

%----unit-sphere() = the sphere of which center is the origin and radius 1
thf('3d.unit-sphere/0_type',type,(
    '3d.unit-sphere/0': '3d.Shape' )).

%----is-square-pyramid(p,a,b,c,d) <-> five points p, a, b, c, d form a square pyramid p-abcd
thf('3d.is-square-pyramid/5_type',type,(
    '3d.is-square-pyramid/5': '3d.Point' > '3d.Point' > '3d.Point' > '3d.Point' > '3d.Point' > $o )).

%----is-sphere(shape) <-> shape is a sphere;;後で消す
thf('3d.is-sphere/1_type',type,(
    '3d.is-sphere/1': '3d.Shape' > $o )).

%----not implemented
%----rotation-around(S, L) = the shape obtained by rotating S around line L
thf('3d.rotation-around/2_type',type,(
    '3d.rotation-around/2': '3d.Shape' > '3d.Shape' > '3d.Shape' )).

%----sphere(p,a) = the sphere of which center is p and radius a
thf('3d.sphere/2_type',type,(
    '3d.sphere/2': '3d.Point' > $real > '3d.Shape' )).

%----tetrahedron(a,b,c,d) = the tetrahedron abcd
thf('3d.tetrahedron/4_type',type,(
    '3d.tetrahedron/4': '3d.Point' > '3d.Point' > '3d.Point' > '3d.Point' > '3d.Shape' )).

%----cuboid(a,b,c,d,e,f,g,h) = the cuboid abcd-efgh
thf('3d.cuboid/8_type',type,(
    '3d.cuboid/8': '3d.Point' > '3d.Point' > '3d.Point' > '3d.Point' > '3d.Point' > '3d.Point' > '3d.Point' > '3d.Point' > '3d.Shape' )).

%----cube(a,b,c,d,e,f,g,h) = the cube abcd-efgh
thf('3d.cube/8_type',type,(
    '3d.cube/8': '3d.Point' > '3d.Point' > '3d.Point' > '3d.Point' > '3d.Point' > '3d.Point' > '3d.Point' > '3d.Point' > '3d.Shape' )).

%----square-pyramid(p,a,b,c,d) = the square pyramid p-abcd
thf('3d.square-pyramid/5_type',type,(
    '3d.square-pyramid/5': '3d.Point' > '3d.Point' > '3d.Point' > '3d.Point' > '3d.Point' > '3d.Shape' )).

%----is-tetrahedron(a,b,c,d) <-> four points a, b, c, d form a tetrahedron
thf('3d.is-tetrahedron/4_type',type,(
    '3d.is-tetrahedron/4': '3d.Point' > '3d.Point' > '3d.Point' > '3d.Point' > $o )).

%----is-regular-tetrahedron(a,b,c,d) <-> four points a, b, c, d form a regular tetrahedron
thf('3d.is-regular-tetrahedron/4_type',type,(
    '3d.is-regular-tetrahedron/4': '3d.Point' > '3d.Point' > '3d.Point' > '3d.Point' > $o )).

%----is-regular-tetrahedron(S) <-> Shape S is a regular tetrahedron
thf('3d.is-regular-tetrahedron/1_type',type,(
    '3d.is-regular-tetrahedron/1': '3d.Shape' > $o )).

%----octahedron(p,a,b,c,d,q) = the octahedron p-abcd-q
thf('3d.octahedron/6_type',type,(
    '3d.octahedron/6': '3d.Point' > '3d.Point' > '3d.Point' > '3d.Point' > '3d.Point' > '3d.Point' > '3d.Shape' )).

%----is-octahedron(p,a,b,c,d,q) <-> six points p, a, b, c, d, q form an octahedron p-abcd-q
thf('3d.is-octahedron/6_type',type,(
    '3d.is-octahedron/6': '3d.Point' > '3d.Point' > '3d.Point' > '3d.Point' > '3d.Point' > '3d.Point' > $o )).

%----is-regular-octahedron(p,a,b,c,d,q) <-> six points p, a, b, c, d, q form a regular octahedron p-abcd-q
thf('3d.is-regular-octahedron/6_type',type,(
    '3d.is-regular-octahedron/6': '3d.Point' > '3d.Point' > '3d.Point' > '3d.Point' > '3d.Point' > '3d.Point' > $o )).

%----is-regular-octahedron(S) <-> Shape S is a regular octahedron
thf('3d.is-regular-octahedron/1_type',type,(
    '3d.is-regular-octahedron/1': '3d.Shape' > $o )).

%----is-parallelopiped(a,b,c,d,e,f,g,h) <-> eight points a, b, c, d, e, f, g, h form a parallelopiped abcd-efgh
thf('3d.is-parallelopiped/8_type',type,(
    '3d.is-parallelopiped/8': '3d.Point' > '3d.Point' > '3d.Point' > '3d.Point' > '3d.Point' > '3d.Point' > '3d.Point' > '3d.Point' > $o )).

%----is-parallelopiped(a,b,c,d,e,f,g,h) <-> eight points a, b, c, d, e, f, g, h form a cuboid
%----same as is-cuboid
thf('3d.is-rectangular-parallelopiped/8_type',type,(
    '3d.is-rectangular-parallelopiped/8': '3d.Point' > '3d.Point' > '3d.Point' > '3d.Point' > '3d.Point' > '3d.Point' > '3d.Point' > '3d.Point' > $o )).

%----is-cuboid(a,b,c,d,e,f,g,h) <-> eight points a, b, c, d, e, f, g, h form a cuboid
%----same as is-rectangular-parallelopiped
thf('3d.is-cuboid/8_type',type,(
    '3d.is-cuboid/8': '3d.Point' > '3d.Point' > '3d.Point' > '3d.Point' > '3d.Point' > '3d.Point' > '3d.Point' > '3d.Point' > $o )).

%----is-cube(a,b,c,d,e,f,g,h) <-> eight points a, b, c, d, e, f, g, h form a cube
thf('3d.is-cube/8_type',type,(
    '3d.is-cube/8': '3d.Point' > '3d.Point' > '3d.Point' > '3d.Point' > '3d.Point' > '3d.Point' > '3d.Point' > '3d.Point' > $o )).

%----faces-of(shape) = the list of faces of shape
thf('3d.faces-of/1_type',type,(
    '3d.faces-of/1': '3d.Shape' > ( 'ListOf' @ '3d.Shape' ) )).

%----is-face-of(shape1, shape2) <-> shape1 is a face of shape2
thf('3d.is-face-of/2_type',type,(
    '3d.is-face-of/2': '3d.Shape' > '3d.Shape' > $o )).

%----is-pyramid(shape) <-> shape is a pyramid
thf('3d.is-pyramid/2_type',type,(
    '3d.is-pyramid/2': '3d.Shape' > '3d.Point' > $o )).

%----circle(p,a,v) = the circle perpendicular to v of which center is p and radius a
thf('3d.circle/3_type',type,(
    '3d.circle/3': '3d.Point' > $real > '3d.Vector' > '3d.Shape' )).

%----disk(p,a,v) = the disk perpendicular to v of which center is p and radius a
thf('3d.disk/3_type',type,(
    '3d.disk/3': '3d.Point' > $real > '3d.Vector' > '3d.Shape' )).

%----arc(p,q,a,v) = the arc perpendicular to v of which center is p, initial point q, and central angle a
thf('3d.arc/4_type',type,(
    '3d.arc/4': '3d.Point' > '3d.Point' > $real > '3d.Vector' > '3d.Shape' )).

%----circular-sector(p,q,a,v) = the circular sector perpendicular to v of which center is p, initial point q, and central angle a
thf('3d.circular-sector/4_type',type,(
    '3d.circular-sector/4': '3d.Point' > '3d.Point' > $real > '3d.Vector' > '3d.Shape' )).

%----cone(shape,p) = the cone of which base is shape and vertex p
%----effective only if shape is a disk
thf('3d.cone/2_type',type,(
    '3d.cone/2': '3d.Shape' > '3d.Point' > '3d.Shape' )).

%----conical-surface(shape,p) = the conical surface of which base is shape and vertex p
%----effective only if shape is a circle
thf('3d.conical-surface/2_type',type,(
    '3d.conical-surface/2': '3d.Shape' > '3d.Point' > '3d.Shape' )).

%----right-cone(shape,p) = the right cone of which base is shape and vertex p
thf('3d.right-cone/2_type',type,(
    '3d.right-cone/2': '3d.Shape' > '3d.Point' > '3d.Shape' )).

%----right-conical-surface(shape,p) = the right conical surface of which base is shape and vertex p
thf('3d.right-conical-surface/2_type',type,(
    '3d.right-conical-surface/2': '3d.Shape' > '3d.Point' > '3d.Shape' )).

%----cylinder(shape1,shape2) = the cylinder of bottom shape1 and of top shape2
%----effective only if shape1 and shape2 are disks
thf('3d.cylinder/2_type',type,(
    '3d.cylinder/2': '3d.Shape' > '3d.Shape' > '3d.Shape' )).

%----cylindrical-surface(shape1,shape2) = the cylindrical surface of bottom shape1 and of top shape2
%----effective only if shape1 and shape2 are circles
thf('3d.cylindrical-surface/2_type',type,(
    '3d.cylindrical-surface/2': '3d.Shape' > '3d.Shape' > '3d.Shape' )).

%----base-of(shape) = the base of shape
thf('3d.base-of/1_type',type,(
    '3d.base-of/1': '3d.Shape' > '3d.Shape' )).

%----vertice-of(shape) = the vertex of shape
%----effective only if shape is a cone, a right cone, a conical surface, or a right conical surface
thf('3d.vertice-of/1_type',type,(
    '3d.vertice-of/1': '3d.Shape' > '3d.Point' )).

%----height-of(shape) = the height of shape
thf('3d.height-of/1_type',type,(
    '3d.height-of/1': '3d.Shape' > $real )).

%----side-of(shape) = the side of shape
%----effective only if shape is a cone, a right cone, or a cylinder
thf('3d.side-of/1_type',type,(
    '3d.side-of/1': '3d.Shape' > '3d.Shape' )).

%----pyramid(shape,p) = the pyramid of base shape and of vertex p
thf('3d.pyramid/2_type',type,(
    '3d.pyramid/2': '3d.Shape' > '3d.Point' > '3d.Shape' )).

%----prism(shape,v) = the prism of which base is shape, which is perpendicular to v, and of which height is the magnitude of v
thf('3d.prism/2_type',type,(
    '3d.prism/2': '3d.Shape' > '3d.Vector' > '3d.Shape' )).

%----upper-region-of(shape) = the upper region of shape, of which projection along the z-axis passes shape
thf('3d.upper-region-of/1_type',type,(
    '3d.upper-region-of/1': '3d.Shape' > '3d.Shape' )).

%----lower-region-of(shape) = the lower region of shape, of which projection along the z-axis passes shape
thf('3d.lower-region-of/1_type',type,(
    '3d.lower-region-of/1': '3d.Shape' > '3d.Shape' )).

%----volume-of(shape) = the volume of shape
thf('3d.volume-of/1_type',type,(
    '3d.volume-of/1': '3d.Shape' > $real )).

%----line3d(a,b,c,d,e,f) = the line (x,y,z) = t(a,b,c) + (d,e,f)
thf('3d.line3d/6_type',type,(
    '3d.line3d/6': $real > $real > $real > $real > $real > $real > '3d.Shape' )).

thf('3d.line3d-type/1_type',type,(
    '3d.line3d-type/1': '3d.Shape' > $o )).

thf('3d.import-2d-point/1_type',type,(
    '3d.import-2d-point/1': '2d.Point' > '3d.Point' )).

%----import-2d-shape(shape) = shape embedded on the xy-plane
thf('3d.import-2d-shape/1_type',type,(
    '3d.import-2d-shape/1': '2d.Shape' > '3d.Shape' )).

%----solid-of-revolution(shape1,shape2) = the shape of shape1 rotated arond shape2
%----effective only if shape2 is a line
thf('3d.solid-of-revolution/2_type',type,(
    '3d.solid-of-revolution/2': '3d.Shape' > '3d.Shape' > '3d.Shape' )).

%----central-axis-of(shape) = the central axis of shape (as a line, not segment)
thf('3d.central-axis-of/1_type',type,(
    '3d.central-axis-of/1': '3d.Shape' > '3d.Shape' )).

%----plane-symmetry(p,q,plane) <-> p and q are symmetric with respect to plane
thf('3d.plane-symmetry/3_type',type,(
    '3d.plane-symmetry/3': '3d.Point' > '3d.Point' > '3d.Shape' > $o )).

%----sphere-type(shape) <-> shape is a sphere
thf('3d.sphere-type/1_type',type,(
    '3d.sphere-type/1': '3d.Shape' > $o )).

%----plane-type(shape) <-> shape is a plane
thf('3d.plane-type/1_type',type,(
    '3d.plane-type/1': '3d.Shape' > $o )).

%----plane1-type(shape) <-> shape is a plane
thf('3d.plane1-type/1_type',type,(
    '3d.plane1-type/1': '3d.Shape' > $o )).

%----plane2-type(shape) <-> shape is a plane
thf('3d.plane2-type/1_type',type,(
    '3d.plane2-type/1': '3d.Shape' > $o )).

%----tetrahedron-type(shape) <-> shape is a tetrahedron
thf('3d.tetrahedron-type/1_type',type,(
    '3d.tetrahedron-type/1': '3d.Shape' > $o )).

%----cuboid-type(shape) <-> shape is a cuboid
thf('3d.cuboid-type/1_type',type,(
    '3d.cuboid-type/1': '3d.Shape' > $o )).

%----cube-type(shape) <-> shape is a cube
thf('3d.cube-type/1_type',type,(
    '3d.cube-type/1': '3d.Shape' > $o )).

%----octahedron-type(shape) <-> shape is a octahedron
thf('3d.octahedron-type/1_type',type,(
    '3d.octahedron-type/1': '3d.Shape' > $o )).

%----square-pyramid-type(shape) <-> shape is a square pyramid
thf('3d.square-pyramid-type/1_type',type,(
    '3d.square-pyramid-type/1': '3d.Shape' > $o )).

%----circle-type(shape) <-> shape is a circle
thf('3d.circle-type/1_type',type,(
    '3d.circle-type/1': '3d.Shape' > $o )).

%----disk-type(shape) <-> shape is a disk
thf('3d.disk-type/1_type',type,(
    '3d.disk-type/1': '3d.Shape' > $o )).

%----arc-type(shape) <-> shape is an arc
thf('3d.arc-type/1_type',type,(
    '3d.arc-type/1': '3d.Shape' > $o )).

%----circular-sector-type(shape) <-> shape is a circular sector
thf('3d.circular-sector-type/1_type',type,(
    '3d.circular-sector-type/1': '3d.Shape' > $o )).

%----cone-type(shape) <-> shape is a cone
thf('3d.cone-type/1_type',type,(
    '3d.cone-type/1': '3d.Shape' > $o )).

%----right-cone-type(shape) <-> shape is a right-cone
thf('3d.right-cone-type/1_type',type,(
    '3d.right-cone-type/1': '3d.Shape' > $o )).

%----cylinder-type(shape) <-> shape is a cylinder
thf('3d.cylinder-type/1_type',type,(
    '3d.cylinder-type/1': '3d.Shape' > $o )).

%----pyramid-type(shape) <-> shape is a pyramid
thf('3d.pyramid-type/1_type',type,(
    '3d.pyramid-type/1': '3d.Shape' > $o )).

%----prism-type(shape) <-> shape is a prism
thf('3d.prism-type/1_type',type,(
    '3d.prism-type/1': '3d.Shape' > $o )).

%------------------------------------------------------------------------------
%
%----Complex Numbers
%
%------------------------------------------------------------------------------
%------------------------------------------------------------------------------
%----Complex Numbers
%------------------------------------------------------------------------------
%----Complex number
thf('complex.Complex_type',type,(
    'complex.Complex': $tType )).

%----complex(x, y) = complex number with real part x and imaginary part y
thf('complex.complex/2_type',type,(
    'complex.complex/2': $real > $real > 'complex.Complex' )).

%----a + b = the sum of a and b in complex numbers
thf('complex.+/2_type',type,(
    'complex.+/2': 'complex.Complex' > 'complex.Complex' > 'complex.Complex' )).

%----a - b = the difference of a and b in complex numbers
thf('complex.-/2_type',type,(
    'complex.-/2': 'complex.Complex' > 'complex.Complex' > 'complex.Complex' )).

%----- a = the negation of a in complex numbers
thf('complex.-/1_type',type,(
    'complex.-/1': 'complex.Complex' > 'complex.Complex' )).

%----a * b = the product of a and b in complex numbers
thf('complex.*/2_type',type,(
    'complex.*/2': 'complex.Complex' > 'complex.Complex' > 'complex.Complex' )).

%----a / b = the quotient of a and b in complex numbers
thf('complex.//2_type',type,(
    'complex.//2': 'complex.Complex' > 'complex.Complex' > 'complex.Complex' )).

%----a ^ b = the power of a to b in complex numbers
thf('complex.^/2_type',type,(
    'complex.^/2': 'complex.Complex' > $real > 'complex.Complex' )).

%----abs(a) = the absolute value of a
thf('complex.abs/1_type',type,(
    'complex.abs/1': 'complex.Complex' > $real )).

%----arg(a) = the argument of a
thf('complex.arg/1_type',type,(
    'complex.arg/1': 'complex.Complex' > $real )).

%----sum([a1,...,an]) = the sum of a1,...,an in complex numbers
thf('complex.sum/1_type',type,(
    'complex.sum/1': ( 'ListOf' @ 'complex.Complex' ) > 'complex.Complex' )).

%----product([a1,...,an]) = the product of a1,...,an in complex numbers
thf('complex.product/1_type',type,(
    'complex.product/1': ( 'ListOf' @ 'complex.Complex' ) > 'complex.Complex' )).

%----i() = the imaginary unit
thf('complex.i/0_type',type,(
    'complex.i/0': 'complex.Complex' )).

%----conjugate(a) = the conjugate of a
thf('complex.conjugate/1_type',type,(
    'complex.conjugate/1': 'complex.Complex' > 'complex.Complex' )).

%----real-part(a) = the real part of a
thf('complex.real-part/1_type',type,(
    'complex.real-part/1': 'complex.Complex' > $real )).

%----imaginary-part(b) = the imaginary part of a
thf('complex.imaginary-part/1_type',type,(
    'complex.imaginary-part/1': 'complex.Complex' > $real )).

%----trivially true for any Complex
thf('complex.is-complex/1_type',type,(
    'complex.is-complex/1': 'complex.Complex' > $o )).

%----real-number(a) <-> a is a real number
thf('complex.real-number/1_type',type,(
    'complex.real-number/1': 'complex.Complex' > $o )).

%----is-purely-imaginary(a) <-> a is a purely imaginary number
thf('complex.is-purely-imaginary/1_type',type,(
    'complex.is-purely-imaginary/1': 'complex.Complex' > $o )).

%----real->complex(a) = a of type Complex
thf('complex.real->complex/1_type',type,(
    'complex.real->complex/1': $real > 'complex.Complex' )).

%------------------------------------------------------------------------------
%----Equations in complex numbers
%------------------------------------------------------------------------------
thf('complex.Equation_type',type,(
    'complex.Equation': $tType )).

%----equation(f(*)) = the equation f(*) = 0
thf('complex.equation/1_type',type,(
    'complex.equation/1': ( 'complex.Complex' > 'complex.Complex' ) > 'complex.Equation' )).

%----quad-equation(c,b,a) = the equation ax^2 + bx + c = 0
thf('complex.quad-equation/3_type',type,(
    'complex.quad-equation/3': $real > $real > $real > 'complex.Equation' )).

%----trivially true for any Equation
thf('complex.is-equation/1_type',type,(
    'complex.is-equation/1': 'complex.Equation' > $o )).

%----has-complex-solution(phi) = phi has a complex solution of which imaginary part is not 0
thf('complex.has-complex-solution/1_type',type,(
    'complex.has-complex-solution/1': 'complex.Equation' > $o )).

%----has-real-solution(phi) = phi has a real solution
thf('complex.has-real-solution/1_type',type,(
    'complex.has-real-solution/1': 'complex.Equation' > $o )).

%----is-solution-of(z,phi) <-> z is a solution of phi
thf('complex.is-solution-of/2_type',type,(
    'complex.is-solution-of/2': 'complex.Complex' > 'complex.Equation' > $o )).

%----is-real-solution-of(z,phi) <-> z is a real solution of phi
thf('complex.is-real-solution-of/2_type',type,(
    'complex.is-real-solution-of/2': 'complex.Complex' > 'complex.Equation' > $o )).

%----are-solutions-of(list, phi) <-> list enumerates all complex solutions of phi
thf('complex.are-solutions-of/2_type',type,(
    'complex.are-solutions-of/2': ( 'ListOf' @ 'complex.Complex' ) > 'complex.Equation' > $o )).

%----are-real-solutions-of(list, phi) <-> list enumerates all real solutions of phi
thf('complex.are-real-solutions-of/2_type',type,(
    'complex.are-real-solutions-of/2': ( 'ListOf' @ 'complex.Complex' ) > 'complex.Equation' > $o )).

%----are-complex-solutions-of(list, phi) <-> list enumerates all complex solutions of which imaginary part are not 0 of phi
thf('complex.are-complex-solutions-of/2_type',type,(
    'complex.are-complex-solutions-of/2': ( 'ListOf' @ 'complex.Complex' ) > 'complex.Equation' > $o )).

%----is-quad-equation(phi) <-> phi is a quadrtic equation
thf('complex.is-quad-equation/1_type',type,(
    'complex.is-quad-equation/1': 'complex.Equation' > $o )).

%------------------------------------------------------------------------------
%----C -> C functions
%------------------------------------------------------------------------------
%----Function from C to C
thf('complex.C2C_type',type,(
    'complex.C2C': $tType )).

thf('complex.fun/1_type',type,(
    'complex.fun/1': ( 'complex.Complex' > 'complex.Complex' ) > 'complex.C2C' )).

thf('complex.is-function/1_type',type,(
    'complex.is-function/1': 'complex.C2C' > $o )).

thf('complex.is-constant-func/1_type',type,(
    'complex.is-constant-func/1': 'complex.C2C' > $o )).

thf('complex.funapp/2_type',type,(
    'complex.funapp/2': 'complex.C2C' > 'complex.Complex' > 'complex.Complex' )).

%------------------------------------------------------------------------------
%----complex->point(z) = the corresponding point of z in R^2
thf('complex.complex->point/1_type',type,(
    'complex.complex->point/1': 'complex.Complex' > '2d.Point' )).

thf('complex.def-complex->point_axiom',axiom,(
    ! [V_a: $real,V_b: $real] :
      ( ( 'complex.complex->point/1' @ ( 'complex.complex/2' @ V_a @ V_b ) )
      = ( '2d.point/2' @ V_a @ V_b ) ) )).

thf('complex.point->complex/1_type',type,(
    'complex.point->complex/1': '2d.Point' > 'complex.Complex' )).

thf('complex.def-point->complex_axiom',axiom,(
    ! [V_a: $real,V_b: $real] :
      ( ( 'complex.point->complex/1' @ ( '2d.point/2' @ V_a @ V_b ) )
      = ( 'complex.complex/2' @ V_a @ V_b ) ) )).

%------------------------------------------------------------------------------
%
%----Number sequence
%
%------------------------------------------------------------------------------
%------------------------------------------------------------------------------
%----Number Sequences
%------------------------------------------------------------------------------
%----sequences
thf('seq.Seq_type',type,(
    'seq.Seq': $tType )).

%----indices for sequences
thf('seq.Index_type',type,(
    'seq.Index': $tType )).

%----index(n) = n of the type Index
thf('seq.index/1_type',type,(
    'seq.index/1': $int > 'seq.Index' )).

%------------------------------------------------------------------------------
%----Constructors
%------------------------------------------------------------------------------
%----seq(a(*)) = the sequence (an), where a(*) is a function from integers to 
%----real numbers
thf('seq.seq/1_type',type,(
    'seq.seq/1': ( $int > $real ) > 'seq.Seq' )).

%----int-seq(a(*)) = the sequence (an), where a(*) is a function from integers to
%----integers
thf('seq.int-seq/1_type',type,(
    'seq.int-seq/1': ( $int > $int ) > 'seq.Seq' )).

%----seq-by-rec1(a1, a(*,*)) = the sequence of which initial term is a1 and 
%----recurrence relation is an+1 = a(n, an)
thf('seq.seq-by-rec1/2_type',type,(
    'seq.seq-by-rec1/2': $real > ( $int > $real > $real ) > 'seq.Seq' )).

%----seq-by-rec1(a1, a(*,*,*)) = the sequence of which initial term is a1 and 
%----recurrence relation is an+2 = a(n, an+1, an)
thf('seq.seq-by-rec2/3_type',type,(
    'seq.seq-by-rec2/3': $real > $real > ( $int > $real > $real > $real ) > 'seq.Seq' )).

%----seq-by-rec1(a1, a(*,*,*,*)) = the sequence of which initial term is a1 and 
%----recurrence relation is an+3 = a(n, an+2, an+1, an)
thf('seq.seq-by-rec3/4_type',type,(
    'seq.seq-by-rec3/4': $real > $real > $real > ( $int > $real > $real > $real > $real ) > 'seq.Seq' )).

%----arith-seq(a1,d) = the arithmetic sequence of which initial term is a1 and 
%----common difference is d
thf('seq.arith-seq/2_type',type,(
    'seq.arith-seq/2': $real > $real > 'seq.Seq' )).

%----geom-seq(a1,r) = the geometric sequence of which initial term is a1 and common 
%----ratio is r
thf('seq.geom-seq/2_type',type,(
    'seq.geom-seq/2': $real > $real > 'seq.Seq' )).

%----trivially true for any Seq
thf('seq.is-sequence/1_type',type,(
    'seq.is-sequence/1': 'seq.Seq' > $o )).

%----is-arith-seq(seq) <-> seq is an arithmetic sequence
thf('seq.is-arith-seq/1_type',type,(
    'seq.is-arith-seq/1': 'seq.Seq' > $o )).

%----is-geom-seq(seq) <-> seq is a geometric sequence
thf('seq.is-geom-seq/1_type',type,(
    'seq.is-geom-seq/1': 'seq.Seq' > $o )).

%----is-integer-seq(seq) <-> seq is a sequence in integers
thf('seq.is-integer-seq/1_type',type,(
    'seq.is-integer-seq/1': 'seq.Seq' > $o )).

%------------------------------------------------------------------------------
%----Operations & Predicates
%------------------------------------------------------------------------------
%----fun-of(seq) = the function of which value at n is the n-th term of seq
thf('seq.fun-of/1_type',type,(
    'seq.fun-of/1': 'seq.Seq' > $int > $real )).

%----nth-term-of(seq, i) = the i-th term of seq
thf('seq.nth-term-of/2_type',type,(
    'seq.nth-term-of/2': 'seq.Seq' > 'seq.Index' > $real )).

%----seq+(s1,s2) = the sum of s1 and s2 in sequence space
thf('seq.seq+/2_type',type,(
    'seq.seq+/2': 'seq.Seq' > 'seq.Seq' > 'seq.Seq' )).

%----seq-(s1,s2) = the difference of s1 and s2 in sequence space
thf('seq.seq-/2_type',type,(
    'seq.seq-/2': 'seq.Seq' > 'seq.Seq' > 'seq.Seq' )).

%----seq*(s1,s2) = the componentwise product of s1 and s2
%----not implemented yet
thf('seq.seq*/2_type',type,(
    'seq.seq*/2': 'seq.Seq' > 'seq.Seq' > 'seq.Seq' )).

%----seq*(s1,s2) = the componentwise quotient of s1 and s2
%----not implemented yet
thf('seq.seq//2_type',type,(
    'seq.seq//2': 'seq.Seq' > 'seq.Seq' > 'seq.Seq' )).

%----s*(c, {a_i}) = { c * a_i }
thf('seq.s*/2_type',type,(
    'seq.s*/2': $real > 'seq.Seq' > 'seq.Seq' )).

%----diff-seq-of(seq) = the difference sequence of seq
thf('seq.diff-seq-of/1_type',type,(
    'seq.diff-seq-of/1': 'seq.Seq' > 'seq.Seq' )).

%----sum-seq(seq) = the sequence of which n-th term is the sum from the first term 
%----to the n-th term of seq
thf('seq.sum-seq/1_type',type,(
    'seq.sum-seq/1': 'seq.Seq' > 'seq.Seq' )).

%----prod-seq(seq) = the sequence of which n-th term is the product from the first 
%----term to the n-th term of seq
thf('seq.prod-seq/1_type',type,(
    'seq.prod-seq/1': 'seq.Seq' > 'seq.Seq' )).

%----sum-from-to(seq,m,n) = the sum from m-th term to n-th term of seq
thf('seq.sum-from-to/3_type',type,(
    'seq.sum-from-to/3': 'seq.Seq' > 'seq.Index' > 'seq.Index' > $real )).

%----prod-from-to(seq,m,n) = the product from m-th term to n-th term of seq
thf('seq.prod-from-to/3_type',type,(
    'seq.prod-from-to/3': 'seq.Seq' > 'seq.Index' > 'seq.Index' > $real )).

%----common-diff-of(seq) = the common difference of seq
%----common-diff-of(seq) is the difference of the second and the first term of 
%----seq if seq is not an arithmetic sequence
thf('seq.common-diff-of/1_type',type,(
    'seq.common-diff-of/1': 'seq.Seq' > $real )).

%----common-ratio-of(seq) = the common ratio of seq
%----common-ratio-of(seq) is the quotient of the second and the first term of seq 
%----if seq is not an geometric sequence
thf('seq.common-ratio-of/1_type',type,(
    'seq.common-ratio-of/1': 'seq.Seq' > $real )).

%----is-limit-of(a, seq) <-> a is the limit of seq
thf('seq.is-limit-of/2_type',type,(
    'seq.is-limit-of/2': $real > 'seq.Seq' > $o )).

%----is-infinite-sum-of(a, seq) <-> a is the limit of series for seq
thf('seq.is-infinite-sum-of/2_type',type,(
    'seq.is-infinite-sum-of/2': $real > 'seq.Seq' > $o )).

%----seq-of-fractional-part(a) = the sequence of the fractional part of a in decimal form
thf('seq.seq-of-fractional-part/1_type',type,(
    'seq.seq-of-fractional-part/1': $real > 'seq.Seq' )).

%----is-divergent(seq) <-> seq is divergent
thf('seq.is-divergent/1_type',type,(
    'seq.is-divergent/1': 'seq.Seq' > $o )).

%----is-strictly-increasing(seq) <-> seq is strictly increasing
thf('seq.is-strictly-increasing/1_type',type,(
    'seq.is-strictly-increasing/1': 'seq.Seq' > $o )).

%----is-non-decreasing(seq) <-> seq is nondecreasing
thf('seq.is-non-decreasing/1_type',type,(
    'seq.is-non-decreasing/1': 'seq.Seq' > $o )).

%----is-strictly-decreasing(seq) <-> seq is strictly decreasing
thf('seq.is-strictly-decreasing/1_type',type,(
    'seq.is-strictly-decreasing/1': 'seq.Seq' > $o )).

%----is-non-increasing(seq) <-> seq is nonincreasing
thf('seq.is-non-increasing/1_type',type,(
    'seq.is-non-increasing/1': 'seq.Seq' > $o )).

%----is-bounded(seq) <-> seq is bounded
thf('seq.is-bounded/1_type',type,(
    'seq.is-bounded/1': 'seq.Seq' > $o )).

%------------------------------------------------------------------------------
%----有限列に対する述語・関数
%------------------------------------------------------------------------------
thf('seq.is-fin-arith-seq/1_type',type,(
    'seq.is-fin-arith-seq/1': ( 'ListOf' @ $real ) > $o )).

thf('seq.is-fin-geom-seq/1_type',type,(
    'seq.is-fin-geom-seq/1': ( 'ListOf' @ $real ) > $o )).

thf('seq.finseq-common-diff-of/1_type',type,(
    'seq.finseq-common-diff-of/1': ( 'ListOf' @ $real ) > $real )).

thf('seq.finseq-common-ratio-of/1_type',type,(
    'seq.finseq-common-ratio-of/1': ( 'ListOf' @ $real ) > $real )).

%------------------------------------------------------------------------------
%
%----Statistics
%
%------------------------------------------------------------------------------
%------------------------------------------------------------------------------
%----Statistics
%------------------------------------------------------------------------------
thf('stat.Data_type',type,(
    'stat.Data': $tType )).

thf('stat.data/1_type',type,(
    'stat.data/1': ( 'ListOf' @ $real ) > 'stat.Data' )).

thf('stat.data-def/2_type',type,(
    'stat.data-def/2': 'String' > 'stat.Data' > $o )).

thf('stat.data-ref/1_type',type,(
    'stat.data-ref/1': 'String' > 'stat.Data' )).

thf('stat.data-count/1_type',type,(
    'stat.data-count/1': 'stat.Data' > $real )).

thf('stat.data-range/1_type',type,(
    'stat.data-range/1': 'stat.Data' > $real )).

thf('stat.data-max/1_type',type,(
    'stat.data-max/1': 'stat.Data' > $real )).

thf('stat.data-min/1_type',type,(
    'stat.data-min/1': 'stat.Data' > $real )).

thf('stat.data*/2_type',type,(
    'stat.data*/2': 'stat.Data' > $real > 'stat.Data' )).

thf('stat.data+/2_type',type,(
    'stat.data+/2': 'stat.Data' > $real > 'stat.Data' )).

thf('stat.data**/2_type',type,(
    'stat.data**/2': 'stat.Data' > 'stat.Data' > 'stat.Data' )).

thf('stat.Class_type',type,(
    'stat.Class': $tType )).

thf('stat.point-class/1_type',type,(
    'stat.point-class/1': $real > 'stat.Class' )).

thf('stat.range-class/2_type',type,(
    'stat.range-class/2': $real > $real > 'stat.Class' )).

thf('stat.class-width/1_type',type,(
    'stat.class-width/1': 'stat.Class' > $real )).

thf('stat.class-value/1_type',type,(
    'stat.class-value/1': 'stat.Class' > $real )).

thf('stat.freq-dist/1_type',type,(
    'stat.freq-dist/1': ( 'ListOf' @ ( 'Pair' @ 'stat.Class' @ $real ) ) > 'stat.Data' )).

thf('stat.frequency-of-in/2_type',type,(
    'stat.frequency-of-in/2': 'stat.Class' > 'stat.Data' > $real )).

thf('stat.relative-frequency-of-in/2_type',type,(
    'stat.relative-frequency-of-in/2': 'stat.Class' > 'stat.Data' > $real )).

thf('stat.freq-dist-of/2_type',type,(
    'stat.freq-dist-of/2': 'stat.Data' > ( 'ListOf' @ $real ) > 'stat.Data' )).

thf('stat.relative-freq-dist-of/2_type',type,(
    'stat.relative-freq-dist-of/2': 'stat.Data' > ( 'ListOf' @ $real ) > 'stat.Data' )).

thf('stat.point-freq-dist-of/1_type',type,(
    'stat.point-freq-dist-of/1': 'stat.Data' > 'stat.Data' )).

thf('stat.point-relative-freq-dist-of/1_type',type,(
    'stat.point-relative-freq-dist-of/1': 'stat.Data' > 'stat.Data' )).

thf('stat.deviation-of-in/2_type',type,(
    'stat.deviation-of-in/2': $real > 'stat.Data' > $real )).

thf('stat.BoxPlot_type',type,(
    'stat.BoxPlot': $tType )).

thf('stat.BoxPlotWithAvg_type',type,(
    'stat.BoxPlotWithAvg': $tType )).

thf('stat.box-plot/5_type',type,(
    'stat.box-plot/5': $real > $real > $real > $real > $real > 'stat.BoxPlot' )).

thf('stat.box-plot-with-avg/6_type',type,(
    'stat.box-plot-with-avg/6': $real > $real > $real > $real > $real > $real > 'stat.BoxPlotWithAvg' )).

thf('stat.box-plot-of/1_type',type,(
    'stat.box-plot-of/1': 'stat.Data' > 'stat.BoxPlot' )).

thf('stat.box-plot-with-avg-of/1_type',type,(
    'stat.box-plot-with-avg-of/1': 'stat.Data' > 'stat.BoxPlotWithAvg' )).

thf('stat.ScatterPlot_type',type,(
    'stat.ScatterPlot': $tType )).

thf('stat.scatter-plot/1_type',type,(
    'stat.scatter-plot/1': ( 'ListOf' @ '2d.Point' ) > 'stat.ScatterPlot' )).

thf('stat.scatter-plot-of/2_type',type,(
    'stat.scatter-plot-of/2': 'stat.Data' > 'stat.Data' > 'stat.ScatterPlot' )).

thf('stat.project-1st/1_type',type,(
    'stat.project-1st/1': 'stat.ScatterPlot' > ( 'ListOf' @ $real ) )).

thf('stat.project-2nd/1_type',type,(
    'stat.project-2nd/1': 'stat.ScatterPlot' > ( 'ListOf' @ $real ) )).

thf('stat.CorrelationTable_type',type,(
    'stat.CorrelationTable': $tType )).

thf('stat.correlation-table/1_type',type,(
    'stat.correlation-table/1': ( 'ListOf' @ ( 'Triple' @ 'stat.Class' @ 'stat.Class' @ $real ) ) > 'stat.CorrelationTable' )).

thf('stat.correlation-table-of/3_type',type,(
    'stat.correlation-table-of/3': ( 'ListOf' @ '2d.Point' ) > ( 'ListOf' @ $real ) > ( 'ListOf' @ $real ) > 'stat.CorrelationTable' )).

thf('stat.freq-dist-of-x/1_type',type,(
    'stat.freq-dist-of-x/1': 'stat.CorrelationTable' > 'stat.Data' )).

thf('stat.freq-dist-of-y/1_type',type,(
    'stat.freq-dist-of-y/1': 'stat.CorrelationTable' > 'stat.Data' )).

thf('stat.average-of/1_type',type,(
    'stat.average-of/1': 'stat.Data' > $real )).

thf('stat.median-of/1_type',type,(
    'stat.median-of/1': 'stat.Data' > $real )).

thf('stat.mode-of/1_type',type,(
    'stat.mode-of/1': 'stat.Data' > $real )).

thf('stat.first-quartile-of/1_type',type,(
    'stat.first-quartile-of/1': 'stat.Data' > $real )).

thf('stat.third-quartile-of/1_type',type,(
    'stat.third-quartile-of/1': 'stat.Data' > $real )).

thf('stat.interquartile-range-of/1_type',type,(
    'stat.interquartile-range-of/1': 'stat.Data' > $real )).

thf('stat.quartile-deviation-of/1_type',type,(
    'stat.quartile-deviation-of/1': 'stat.Data' > $real )).

thf('stat.variance-of/1_type',type,(
    'stat.variance-of/1': 'stat.Data' > $real )).

thf('stat.standard-deviation-of/1_type',type,(
    'stat.standard-deviation-of/1': 'stat.Data' > $real )).

thf('stat.covariance-of/2_type',type,(
    'stat.covariance-of/2': 'stat.Data' > 'stat.Data' > $real )).

thf('stat.correlation-coefficient-of/2_type',type,(
    'stat.correlation-coefficient-of/2': 'stat.Data' > 'stat.Data' > $real )).

thf('stat.rounded/2_type',type,(
    'stat.rounded/2': $real > $int > $real )).

thf('stat.round-at/2_type',type,(
    'stat.round-at/2': $real > $int > $real )).

thf('stat.sort</1_type',type,(
    'stat.sort</1': ( 'ListOf' @ $real ) > ( 'ListOf' @ $real ) )).

thf('stat.sort>/1_type',type,(
    'stat.sort>/1': ( 'ListOf' @ $real ) > ( 'ListOf' @ $real ) )).

thf('stat.uniq/1_type',type,(
    'stat.uniq/1': ( 'ListOf' @ $real ) > ( 'ListOf' @ $real ) )).

%;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
%----End
%;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
thf('.def-is-var_axiom',axiom,(
    ! [V_v: 'Var'] :
      ( 'is-var/1' @ V_v ) )).

thf('.def_degree_axiom',axiom,
    ( 'Degree/0'
    = ( $quotient @ 'Pi/0' @ 180.0 ) )).

thf('.def_equal_all_elem0_axiom',axiom,(
    ! [Tv3: $tType] :
      ( 'equal/1' @ Tv3 @ ( 'nil/0' @ Tv3 ) ) )).

thf('.def_equal_all_elem1_axiom',axiom,(
    ! [Tv6: $tType,V_x: Tv6] :
      ( 'equal/1' @ Tv6 @ ( 'cons/2' @ Tv6 @ V_x @ ( 'nil/0' @ Tv6 ) ) ) )).

thf('.def_equal_all_elem2_axiom',axiom,(
    ! [Tv14: $tType,V_x: Tv14,V_y: Tv14,V_xs: ( 'ListOf' @ Tv14 )] :
      ( ( 'equal/1' @ Tv14 @ ( 'cons/2' @ Tv14 @ V_x @ ( 'cons/2' @ Tv14 @ V_y @ V_xs ) ) )
    <=> ( ( V_x = V_y )
        & ( 'equal/1' @ Tv14 @ ( 'cons/2' @ Tv14 @ V_y @ V_xs ) ) ) ) )).

thf('.def_map_on_nil_axiom',axiom,(
    ! [Tv8: $tType,Tv9: $tType,V_f: ( Tv8 > Tv9 )] :
      ( ( 'map/2' @ Tv8 @ Tv9 @ V_f @ ( 'nil/0' @ Tv8 ) )
      = ( 'nil/0' @ Tv9 ) ) )).

thf('.def_map_on_cons_axiom',axiom,(
    ! [Tv16: $tType,Tv17: $tType,V_f: ( Tv16 > Tv17 ),V_hd: Tv16,V_tl: ( 'ListOf' @ Tv16 )] :
      ( ( 'map/2' @ Tv16 @ Tv17 @ V_f @ ( 'cons/2' @ Tv16 @ V_hd @ V_tl ) )
      = ( 'cons/2' @ Tv17 @ ( V_f @ V_hd ) @ ( 'map/2' @ Tv16 @ Tv17 @ V_f @ V_tl ) ) ) )).

thf('.def_foldr_on_nil_axiom',axiom,(
    ! [Tv7: $tType,Tv8: $tType,V_f: ( Tv8 > Tv7 > Tv7 ),V_res: Tv7] :
      ( ( 'foldr/3' @ Tv8 @ Tv7 @ V_f @ V_res @ ( 'nil/0' @ Tv8 ) )
      = V_res ) )).

thf('.def_foldr_on_cons_axiom',axiom,(
    ! [Tv17: $tType,Tv18: $tType,V_f: ( Tv18 > Tv17 > Tv17 ),V_res: Tv17,V_hd: Tv18,V_tl: ( 'ListOf' @ Tv18 )] :
      ( ( 'foldr/3' @ Tv18 @ Tv17 @ V_f @ V_res @ ( 'cons/2' @ Tv18 @ V_hd @ V_tl ) )
      = ( 'foldr/3' @ Tv18 @ Tv17 @ V_f @ ( V_f @ V_hd @ V_res ) @ V_tl ) ) )).

thf('.def_car_axiom',axiom,(
    ! [Tv7: $tType,V_x: Tv7,V_xs: ( 'ListOf' @ Tv7 )] :
      ( ( 'car/1' @ Tv7 @ ( 'cons/2' @ Tv7 @ V_x @ V_xs ) )
      = V_x ) )).

thf('.def_cdr_axiom',axiom,(
    ! [Tv7: $tType,V_x: Tv7,V_xs: ( 'ListOf' @ Tv7 )] :
      ( ( 'cdr/1' @ Tv7 @ ( 'cons/2' @ Tv7 @ V_x @ V_xs ) )
      = V_xs ) )).

thf('.def_cadr_axiom',axiom,(
    ! [Tv10: $tType,V_x1: Tv10,V_x2: Tv10,V_xs: ( 'ListOf' @ Tv10 )] :
      ( ( 'cadr/1' @ Tv10 @ ( 'cons/2' @ Tv10 @ V_x1 @ ( 'cons/2' @ Tv10 @ V_x2 @ V_xs ) ) )
      = V_x2 ) )).

thf('.def_caddr_axiom',axiom,(
    ! [Tv13: $tType,V_x1: Tv13,V_x2: Tv13,V_x3: Tv13,V_xs: ( 'ListOf' @ Tv13 )] :
      ( ( 'caddr/1' @ Tv13 @ ( 'cons/2' @ Tv13 @ V_x1 @ ( 'cons/2' @ Tv13 @ V_x2 @ ( 'cons/2' @ Tv13 @ V_x3 @ V_xs ) ) ) )
      = V_x3 ) )).

thf('.def_cadddr_axiom',axiom,(
    ! [Tv16: $tType,V_x1: Tv16,V_x2: Tv16,V_x3: Tv16,V_x4: Tv16,V_xs: ( 'ListOf' @ Tv16 )] :
      ( ( 'cadddr/1' @ Tv16 @ ( 'cons/2' @ Tv16 @ V_x1 @ ( 'cons/2' @ Tv16 @ V_x2 @ ( 'cons/2' @ Tv16 @ V_x3 @ ( 'cons/2' @ Tv16 @ V_x4 @ V_xs ) ) ) ) )
      = V_x4 ) )).

thf('.def_last_axiom',axiom,(
    ! [Tv8: $tType,V_x: Tv8] :
      ( ( 'last/1' @ Tv8 @ ( 'cons/2' @ Tv8 @ V_x @ ( 'nil/0' @ Tv8 ) ) )
      = V_x ) )).

thf('.def_last_rec_axiom',axiom,(
    ! [Tv14: $tType,V_x: Tv14,V_y: Tv14,V_tl: ( 'ListOf' @ Tv14 )] :
      ( ( 'last/1' @ Tv14 @ ( 'cons/2' @ Tv14 @ V_x @ ( 'cons/2' @ Tv14 @ V_y @ V_tl ) ) )
      = ( 'last/1' @ Tv14 @ ( 'cons/2' @ Tv14 @ V_y @ V_tl ) ) ) )).

thf('.def_butlast_nil_axiom',axiom,(
    ! [Tv7: $tType] :
      ( ( 'butlast/1' @ Tv7 @ ( 'nil/0' @ Tv7 ) )
      = ( 'nil/0' @ Tv7 ) ) )).

thf('.def_butlast_base_axiom',axiom,(
    ! [Tv10: $tType,V_x: Tv10] :
      ( ( 'butlast/1' @ Tv10 @ ( 'cons/2' @ Tv10 @ V_x @ ( 'nil/0' @ Tv10 ) ) )
      = ( 'nil/0' @ Tv10 ) ) )).

thf('.def_butlast_rec_axiom',axiom,(
    ! [Tv11: $tType,V_x: Tv11,V_tl: ( 'ListOf' @ Tv11 )] :
      ( ( 'butlast/1' @ Tv11 @ ( 'cons/2' @ Tv11 @ V_x @ V_tl ) )
      = ( 'cons/2' @ Tv11 @ V_x @ ( 'butlast/1' @ Tv11 @ V_tl ) ) ) )).

thf('.def_is_prefix_of_nil1_axiom',axiom,(
    ! [Tv4: $tType,V_lis: ( 'ListOf' @ Tv4 )] :
      ( 'is-prefix-of/2' @ Tv4 @ ( 'nil/0' @ Tv4 ) @ V_lis ) )).

thf('.def_is_prefix_of_nil2_axiom',axiom,(
    ! [Tv8: $tType,V_x: Tv8,V_xs: ( 'ListOf' @ Tv8 )] :
      ( ( 'is-prefix-of/2' @ Tv8 @ ( 'cons/2' @ Tv8 @ V_x @ V_xs ) @ ( 'nil/0' @ Tv8 ) )
    <=> $false ) )).

thf('.def_is_prefix_of_cons_axiom',axiom,(
    ! [Tv13: $tType,V_x: Tv13,V_xs: ( 'ListOf' @ Tv13 ),V_y: Tv13,V_ys: ( 'ListOf' @ Tv13 )] :
      ( ( 'is-prefix-of/2' @ Tv13 @ ( 'cons/2' @ Tv13 @ V_x @ V_xs ) @ ( 'cons/2' @ Tv13 @ V_y @ V_ys ) )
    <=> ( ( V_x = V_y )
        & ( 'is-prefix-of/2' @ Tv13 @ V_xs @ V_ys ) ) ) )).

thf('.def_is_infix_of_nil_axiom',axiom,(
    ! [Tv5: $tType,V_lis: ( 'ListOf' @ Tv5 )] :
      ( ( 'is-infix-of/2' @ Tv5 @ V_lis @ ( 'nil/0' @ Tv5 ) )
    <=> $false ) )).

thf('.def_is_infix_of_cons_axiom',axiom,(
    ! [Tv9: $tType,V_xs: ( 'ListOf' @ Tv9 ),V_ys: ( 'ListOf' @ Tv9 )] :
      ( ( 'is-infix-of/2' @ Tv9 @ V_xs @ V_ys )
    <=> ( ( 'is-prefix-of/2' @ Tv9 @ V_xs @ V_ys )
        | ( 'is-infix-of/2' @ Tv9 @ V_xs @ ( 'cdr/1' @ Tv9 @ V_ys ) ) ) ) )).

thf('.def_foldr1_on_singleton_axiom',axiom,(
    ! [Tv9: $tType,V_f: ( Tv9 > Tv9 > Tv9 ),V_x: Tv9] :
      ( ( 'foldr1/2' @ Tv9 @ V_f @ ( 'cons/2' @ Tv9 @ V_x @ ( 'nil/0' @ Tv9 ) ) )
      = V_x ) )).

thf('.def_foldr1_on_cons_axiom',axiom,(
    ! [Tv16: $tType,V_f: ( Tv16 > Tv16 > Tv16 ),V_hd: Tv16,V_tl: ( 'ListOf' @ Tv16 )] :
      ( ( 'foldr1/2' @ Tv16 @ V_f @ ( 'cons/2' @ Tv16 @ V_hd @ V_tl ) )
      = ( V_f @ V_hd @ ( 'foldr1/2' @ Tv16 @ V_f @ V_tl ) ) ) )).

thf('.def_all_0_axiom',axiom,(
    ! [Tv4: $tType,V_f: ( Tv4 > $o )] :
      ( 'all/2' @ Tv4 @ V_f @ ( 'nil/0' @ Tv4 ) ) )).

thf('.def_all_rec_axiom',axiom,(
    ! [Tv10: $tType,V_f: ( Tv10 > $o ),V_x: Tv10,V_xs: ( 'ListOf' @ Tv10 )] :
      ( ( 'all/2' @ Tv10 @ V_f @ ( 'cons/2' @ Tv10 @ V_x @ V_xs ) )
    <=> ( ( V_f @ V_x )
        & ( 'all/2' @ Tv10 @ V_f @ V_xs ) ) ) )).

thf('.def_combinatorial_all_base_case_axiom',axiom,(
    ! [Tv5: $tType,V_pred: ( Tv5 > Tv5 > $o )] :
      ( ( 'combinatorial-all/2' @ Tv5 @ V_pred @ ( 'nil/0' @ Tv5 ) )
    <=> $true ) )).

thf('.def_combinatorial_all_rec_axiom',axiom,(
    ! [Tv16: $tType,V_pred: ( Tv16 > Tv16 > $o ),V_x: Tv16,V_xs: ( 'ListOf' @ Tv16 )] :
      ( ( 'combinatorial-all/2' @ Tv16 @ V_pred @ ( 'cons/2' @ Tv16 @ V_x @ V_xs ) )
    <=> ( ( 'all/2' @ Tv16
          @ ^ [V_y: Tv16] :
              ( V_pred @ V_x @ V_y )
          @ V_xs )
        & ( 'combinatorial-all/2' @ Tv16 @ V_pred @ V_xs ) ) ) )).

thf('.def_combinatorial_some_base_case_axiom',axiom,(
    ! [Tv5: $tType,V_pred: ( Tv5 > Tv5 > $o )] :
      ( ( 'combinatorial-some/2' @ Tv5 @ V_pred @ ( 'nil/0' @ Tv5 ) )
    <=> $false ) )).

thf('.def_combinatorial_some_rec_axiom',axiom,(
    ! [Tv16: $tType,V_pred: ( Tv16 > Tv16 > $o ),V_x: Tv16,V_xs: ( 'ListOf' @ Tv16 )] :
      ( ( 'combinatorial-some/2' @ Tv16 @ V_pred @ ( 'cons/2' @ Tv16 @ V_x @ V_xs ) )
    <=> ( ( 'some/2' @ Tv16
          @ ^ [V_y: Tv16] :
              ( V_pred @ V_x @ V_y )
          @ V_xs )
        | ( 'combinatorial-some/2' @ Tv16 @ V_pred @ V_xs ) ) ) )).

thf('.def_cyclic_all_base_case0_axiom',axiom,(
    ! [Tv5: $tType,V_pred: ( Tv5 > Tv5 > Tv5 > $o )] :
      ( ( 'cyclic-all/2' @ Tv5 @ V_pred @ ( 'nil/0' @ Tv5 ) )
    <=> $true ) )).

thf('.def_cyclic_all_base_case1_axiom',axiom,(
    ! [Tv8: $tType,V_pred: ( Tv8 > Tv8 > Tv8 > $o ),V_p0: Tv8] :
      ( ( 'cyclic-all/2' @ Tv8 @ V_pred @ ( 'cons/2' @ Tv8 @ V_p0 @ ( 'nil/0' @ Tv8 ) ) )
    <=> $true ) )).

thf('.def_cyclic_all_base_case2_axiom',axiom,(
    ! [Tv11: $tType,V_pred: ( Tv11 > Tv11 > Tv11 > $o ),V_p0: Tv11,V_p1: Tv11] :
      ( ( 'cyclic-all/2' @ Tv11 @ V_pred @ ( 'cons/2' @ Tv11 @ V_p0 @ ( 'cons/2' @ Tv11 @ V_p1 @ ( 'nil/0' @ Tv11 ) ) ) )
    <=> $true ) )).

thf('cyclic-all-rec/2_type',type,(
    'cyclic-all-rec/2': 
      !>[Tv0: $tType] :
        ( ( Tv0 > Tv0 > Tv0 > $o ) > ( 'ListOf' @ Tv0 ) > $o ) )).

thf('.def_cyclic_all_rec_base_case2_axiom',axiom,(
    ! [Tv11: $tType,V_pred: ( Tv11 > Tv11 > Tv11 > $o ),V_p0: Tv11,V_p1: Tv11] :
      ( ( 'cyclic-all-rec/2' @ Tv11 @ V_pred @ ( 'cons/2' @ Tv11 @ V_p0 @ ( 'cons/2' @ Tv11 @ V_p1 @ ( 'nil/0' @ Tv11 ) ) ) )
    <=> $true ) )).

thf('.def_cyclic_all_rec_base_case3_axiom',axiom,(
    ! [Tv20: $tType,V_pred: ( Tv20 > Tv20 > Tv20 > $o ),V_p0: Tv20,V_p1: Tv20,V_p2: Tv20] :
      ( ( 'cyclic-all-rec/2' @ Tv20 @ V_pred @ ( 'cons/2' @ Tv20 @ V_p0 @ ( 'cons/2' @ Tv20 @ V_p1 @ ( 'cons/2' @ Tv20 @ V_p2 @ ( 'nil/0' @ Tv20 ) ) ) ) )
    <=> ( V_pred @ V_p0 @ V_p1 @ V_p2 ) ) )).

thf('.def_cyclic_all_rec_axiom',axiom,(
    ! [Tv26: $tType,V_pred: ( Tv26 > Tv26 > Tv26 > $o ),V_p0: Tv26,V_p1: Tv26,V_p2: Tv26,V_ps: ( 'ListOf' @ Tv26 )] :
      ( ( 'cyclic-all-rec/2' @ Tv26 @ V_pred @ ( 'cons/2' @ Tv26 @ V_p0 @ ( 'cons/2' @ Tv26 @ V_p1 @ ( 'cons/2' @ Tv26 @ V_p2 @ V_ps ) ) ) )
    <=> ( ( V_pred @ V_p0 @ V_p1 @ V_p2 )
        & ( 'cyclic-all-rec/2' @ Tv26 @ V_pred @ ( 'cons/2' @ Tv26 @ V_p1 @ ( 'cons/2' @ Tv26 @ V_p2 @ V_ps ) ) ) ) ) )).

thf('.def_cyclic_all_axiom',axiom,(
    ! [Tv51: $tType,V_pred: ( Tv51 > Tv51 > Tv51 > $o ),V_list: ( 'ListOf' @ Tv51 )] :
      ( ( 'cyclic-all/2' @ Tv51 @ V_pred @ V_list )
    <=> ( ( V_pred @ ( 'last/1' @ Tv51 @ ( 'butlast/1' @ Tv51 @ V_list ) ) @ ( 'last/1' @ Tv51 @ V_list ) @ ( 'car/1' @ Tv51 @ V_list ) )
        & ( V_pred @ ( 'last/1' @ Tv51 @ V_list ) @ ( 'car/1' @ Tv51 @ V_list ) @ ( 'cadr/1' @ Tv51 @ V_list ) )
        & ( V_pred @ ( 'car/1' @ Tv51 @ V_list ) @ ( 'cadr/1' @ Tv51 @ V_list ) @ ( 'caddr/1' @ Tv51 @ V_list ) )
        & ( 'cyclic-all-rec/2' @ Tv51 @ V_pred @ ( 'cdr/1' @ Tv51 @ V_list ) ) ) ) )).

thf('.def_cyclic_some_base_case0_axiom',axiom,(
    ! [Tv5: $tType,V_pred: ( Tv5 > Tv5 > Tv5 > $o )] :
      ( ( 'cyclic-some/2' @ Tv5 @ V_pred @ ( 'nil/0' @ Tv5 ) )
    <=> $false ) )).

thf('.def_cyclic_some_base_case1_axiom',axiom,(
    ! [Tv8: $tType,V_pred: ( Tv8 > Tv8 > Tv8 > $o ),V_p0: Tv8] :
      ( ( 'cyclic-some/2' @ Tv8 @ V_pred @ ( 'cons/2' @ Tv8 @ V_p0 @ ( 'nil/0' @ Tv8 ) ) )
    <=> $false ) )).

thf('.def_cyclic_some_base_case2_axiom',axiom,(
    ! [Tv11: $tType,V_pred: ( Tv11 > Tv11 > Tv11 > $o ),V_p0: Tv11,V_p1: Tv11] :
      ( ( 'cyclic-some/2' @ Tv11 @ V_pred @ ( 'cons/2' @ Tv11 @ V_p0 @ ( 'cons/2' @ Tv11 @ V_p1 @ ( 'nil/0' @ Tv11 ) ) ) )
    <=> $false ) )).

thf('cyclic-some-rec/2_type',type,(
    'cyclic-some-rec/2': 
      !>[Tv0: $tType] :
        ( ( Tv0 > Tv0 > Tv0 > $o ) > ( 'ListOf' @ Tv0 ) > $o ) )).

thf('.def_cyclic_some_rec_base_case2_axiom',axiom,(
    ! [Tv11: $tType,V_pred: ( Tv11 > Tv11 > Tv11 > $o ),V_p0: Tv11,V_p1: Tv11] :
      ( ( 'cyclic-some-rec/2' @ Tv11 @ V_pred @ ( 'cons/2' @ Tv11 @ V_p0 @ ( 'cons/2' @ Tv11 @ V_p1 @ ( 'nil/0' @ Tv11 ) ) ) )
    <=> $false ) )).

thf('.def_cyclic_some_rec_base_case3_axiom',axiom,(
    ! [Tv20: $tType,V_pred: ( Tv20 > Tv20 > Tv20 > $o ),V_p0: Tv20,V_p1: Tv20,V_p2: Tv20] :
      ( ( 'cyclic-some-rec/2' @ Tv20 @ V_pred @ ( 'cons/2' @ Tv20 @ V_p0 @ ( 'cons/2' @ Tv20 @ V_p1 @ ( 'cons/2' @ Tv20 @ V_p2 @ ( 'nil/0' @ Tv20 ) ) ) ) )
    <=> ( V_pred @ V_p0 @ V_p1 @ V_p2 ) ) )).

thf('.def_cyclic_some_rec_axiom',axiom,(
    ! [Tv26: $tType,V_pred: ( Tv26 > Tv26 > Tv26 > $o ),V_p0: Tv26,V_p1: Tv26,V_p2: Tv26,V_ps: ( 'ListOf' @ Tv26 )] :
      ( ( 'cyclic-some-rec/2' @ Tv26 @ V_pred @ ( 'cons/2' @ Tv26 @ V_p0 @ ( 'cons/2' @ Tv26 @ V_p1 @ ( 'cons/2' @ Tv26 @ V_p2 @ V_ps ) ) ) )
    <=> ( ( V_pred @ V_p0 @ V_p1 @ V_p2 )
        | ( 'cyclic-some-rec/2' @ Tv26 @ V_pred @ ( 'cons/2' @ Tv26 @ V_p1 @ ( 'cons/2' @ Tv26 @ V_p2 @ V_ps ) ) ) ) ) )).

thf('.def_cyclic_some_axiom',axiom,(
    ! [Tv51: $tType,V_pred: ( Tv51 > Tv51 > Tv51 > $o ),V_list: ( 'ListOf' @ Tv51 )] :
      ( ( 'cyclic-some/2' @ Tv51 @ V_pred @ V_list )
    <=> ( ( V_pred @ ( 'last/1' @ Tv51 @ ( 'butlast/1' @ Tv51 @ V_list ) ) @ ( 'last/1' @ Tv51 @ V_list ) @ ( 'car/1' @ Tv51 @ V_list ) )
        | ( V_pred @ ( 'last/1' @ Tv51 @ V_list ) @ ( 'car/1' @ Tv51 @ V_list ) @ ( 'cadr/1' @ Tv51 @ V_list ) )
        | ( V_pred @ ( 'car/1' @ Tv51 @ V_list ) @ ( 'cadr/1' @ Tv51 @ V_list ) @ ( 'caddr/1' @ Tv51 @ V_list ) )
        | ( 'cyclic-some-rec/2' @ Tv51 @ V_pred @ ( 'cdr/1' @ Tv51 @ V_list ) ) ) ) )).

thf('.def_some_0_axiom',axiom,(
    ! [Tv5: $tType,V_f: ( Tv5 > $o )] :
      ( ( 'some/2' @ Tv5 @ V_f @ ( 'nil/0' @ Tv5 ) )
    <=> $false ) )).

thf('.def_some_rec_axiom',axiom,(
    ! [Tv10: $tType,V_f: ( Tv10 > $o ),V_x: Tv10,V_xs: ( 'ListOf' @ Tv10 )] :
      ( ( 'some/2' @ Tv10 @ V_f @ ( 'cons/2' @ Tv10 @ V_x @ V_xs ) )
    <=> ( ( V_f @ V_x )
        | ( 'some/2' @ Tv10 @ V_f @ V_xs ) ) ) )).

thf('.def_all2_nil_case1_axiom',axiom,(
    ! [Tv8: $tType,Tv10: $tType,V_pred: ( Tv10 > Tv8 > $o ),V_xs: ( 'ListOf' @ Tv10 )] :
      ( ( 'all2/3' @ Tv8 @ Tv10 @ V_pred @ V_xs @ ( 'nil/0' @ Tv8 ) )
    <=> ( V_xs
        = ( 'nil/0' @ Tv10 ) ) ) )).

thf('.def_all2_nil_case2_axiom',axiom,(
    ! [Tv8: $tType,Tv10: $tType,V_pred: ( Tv8 > Tv10 > $o ),V_ys: ( 'ListOf' @ Tv10 )] :
      ( ( 'all2/3' @ Tv10 @ Tv8 @ V_pred @ ( 'nil/0' @ Tv8 ) @ V_ys )
    <=> ( V_ys
        = ( 'nil/0' @ Tv10 ) ) ) )).

thf('.def_all2_cons_case1_axiom',axiom,(
    ! [Tv18: $tType,Tv19: $tType,V_pred: ( Tv19 > Tv18 > $o ),V_x: Tv19,V_xs: ( 'ListOf' @ Tv19 ),V_y: Tv18,V_ys: ( 'ListOf' @ Tv18 )] :
      ( ( 'all2/3' @ Tv18 @ Tv19 @ V_pred @ ( 'cons/2' @ Tv19 @ V_x @ V_xs ) @ ( 'cons/2' @ Tv18 @ V_y @ V_ys ) )
    <=> ( ( V_pred @ V_x @ V_y )
        & ( 'all2/3' @ Tv18 @ Tv19 @ V_pred @ V_xs @ V_ys ) ) ) )).

thf('.def_all2_cons_case2_axiom',axiom,(
    ! [Tv21: $tType,Tv22: $tType,V_pred: ( Tv22 > Tv21 > $o ),V_x: Tv22,V_xs: ( 'ListOf' @ Tv22 ),V_ys: ( 'ListOf' @ Tv21 )] :
      ( ( 'all2/3' @ Tv21 @ Tv22 @ V_pred @ ( 'cons/2' @ Tv22 @ V_x @ V_xs ) @ V_ys )
    <=> ? [V_y: Tv21,V_ys1: ( 'ListOf' @ Tv21 )] :
          ( ( V_ys
            = ( 'cons/2' @ Tv21 @ V_y @ V_ys1 ) )
          & ( V_pred @ V_x @ V_y )
          & ( 'all2/3' @ Tv21 @ Tv22 @ V_pred @ V_xs @ V_ys1 ) ) ) )).

thf('.def_all2_cons_case3_axiom',axiom,(
    ! [Tv21: $tType,Tv22: $tType,V_pred: ( Tv22 > Tv21 > $o ),V_xs: ( 'ListOf' @ Tv22 ),V_y: Tv21,V_ys: ( 'ListOf' @ Tv21 )] :
      ( ( 'all2/3' @ Tv21 @ Tv22 @ V_pred @ V_xs @ ( 'cons/2' @ Tv21 @ V_y @ V_ys ) )
    <=> ? [V_x: Tv22,V_xs1: ( 'ListOf' @ Tv22 )] :
          ( ( V_xs
            = ( 'cons/2' @ Tv22 @ V_x @ V_xs1 ) )
          & ( V_pred @ V_x @ V_y )
          & ( 'all2/3' @ Tv21 @ Tv22 @ V_pred @ V_xs1 @ V_ys ) ) ) )).

thf('.def_list_equality0_axiom',axiom,(
    ! [Tv6: $tType] :
      ( ( ( 'nil/0' @ Tv6 )
        = ( 'nil/0' @ Tv6 ) )
    <=> $true ) )).

thf('.def_list_equality_rec_axiom',axiom,(
    ! [Tv12: $tType,V_x: Tv12,V_xs: ( 'ListOf' @ Tv12 ),V_y: Tv12,V_ys: ( 'ListOf' @ Tv12 )] :
      ( ( ( 'cons/2' @ Tv12 @ V_x @ V_xs )
        = ( 'cons/2' @ Tv12 @ V_y @ V_ys ) )
    <=> ( ( V_x = V_y )
        & ( V_xs = V_ys ) ) ) )).

thf('.def_list_equality_not_equal1_axiom',axiom,(
    ! [Tv8: $tType,V_x: Tv8,V_xs: ( 'ListOf' @ Tv8 )] :
      ( ( ( 'cons/2' @ Tv8 @ V_x @ V_xs )
        = ( 'nil/0' @ Tv8 ) )
    <=> $false ) )).

thf('.def_list_equality_not_equal2_axiom',axiom,(
    ! [Tv8: $tType,V_x: Tv8,V_xs: ( 'ListOf' @ Tv8 )] :
      ( ( ( 'nil/0' @ Tv8 )
        = ( 'cons/2' @ Tv8 @ V_x @ V_xs ) )
    <=> $false ) )).

thf('.def_member_0_axiom',axiom,(
    ! [Tv5: $tType,V_x: Tv5] :
      ( ( 'member/2' @ Tv5 @ V_x @ ( 'nil/0' @ Tv5 ) )
    <=> $false ) )).

thf('.def_member_rec_axiom',axiom,(
    ! [Tv10: $tType,V_x: Tv10,V_y: Tv10,V_ys: ( 'ListOf' @ Tv10 )] :
      ( ( 'member/2' @ Tv10 @ V_x @ ( 'cons/2' @ Tv10 @ V_y @ V_ys ) )
    <=> ( ( V_x = V_y )
        | ( 'member/2' @ Tv10 @ V_x @ V_ys ) ) ) )).

thf('.def_delete_nil_axiom',axiom,(
    ! [Tv8: $tType,V_x: Tv8] :
      ( ( 'delete/2' @ Tv8 @ V_x @ ( 'nil/0' @ Tv8 ) )
      = ( 'nil/0' @ Tv8 ) ) )).

thf('.def_delete_cons_axiom',axiom,(
    ! [Tv17: $tType,V_x: Tv17,V_y: Tv17,V_ys: ( 'ListOf' @ Tv17 )] :
      ( ( 'delete/2' @ Tv17 @ V_x @ ( 'cons/2' @ Tv17 @ V_y @ V_ys ) )
      = ( 'if/3' @ ( 'ListOf' @ Tv17 )
        @ ^ [V__: 'Unit'] : ( V_x = V_y )
        @ V_ys
        @ ( 'cons/2' @ Tv17 @ V_y @ ( 'delete/2' @ Tv17 @ V_x @ V_ys ) ) ) ) )).

thf('.def_remove_x_nil_axiom',axiom,(
    ! [Tv8: $tType,V_x: Tv8] :
      ( ( 'remove/2' @ Tv8 @ V_x @ ( 'nil/0' @ Tv8 ) )
      = ( 'nil/0' @ Tv8 ) ) )).

thf('.def_remove_rec_cons_axiom',axiom,(
    ! [Tv22: $tType,V_x: Tv22,V_yhd: Tv22,V_ytl: ( 'ListOf' @ Tv22 )] :
      ( ( 'remove/2' @ Tv22 @ V_x @ ( 'cons/2' @ Tv22 @ V_yhd @ V_ytl ) )
      = ( ^ [V_tl: ( 'ListOf' @ Tv22 )] :
            ( 'if/3' @ ( 'ListOf' @ Tv22 )
            @ ^ [V__: 'Unit'] : ( V_x = V_yhd )
            @ V_tl
            @ ( 'cons/2' @ Tv22 @ V_yhd @ V_tl ) )
        @ ( 'remove/2' @ Tv22 @ V_x @ V_ytl ) ) ) )).

thf('.def_remove_list_x_nil_axiom',axiom,(
    ! [Tv8: $tType,V_x: ( 'ListOf' @ Tv8 )] :
      ( ( 'remove-list/2' @ Tv8 @ V_x @ ( 'nil/0' @ Tv8 ) )
      = ( 'nil/0' @ Tv8 ) ) )).

thf('.def_remove_list_nil_y_axiom',axiom,(
    ! [Tv6: $tType,V_y: ( 'ListOf' @ Tv6 )] :
      ( ( 'remove-list/2' @ Tv6 @ ( 'nil/0' @ Tv6 ) @ V_y )
      = V_y ) )).

thf('.def_remove_list_rec_cons_axiom',axiom,(
    ! [Tv12: $tType,V_xhd: Tv12,V_xtl: ( 'ListOf' @ Tv12 ),V_y: ( 'ListOf' @ Tv12 )] :
      ( ( 'remove-list/2' @ Tv12 @ ( 'cons/2' @ Tv12 @ V_xhd @ V_xtl ) @ V_y )
      = ( 'remove-list/2' @ Tv12 @ V_xtl @ ( 'remove/2' @ Tv12 @ V_xhd @ V_y ) ) ) )).

thf('.def_pairwise_distinct_nil_case_axiom',axiom,(
    ! [Tv3: $tType] :
      ( 'pairwise-distinct/1' @ Tv3 @ ( 'nil/0' @ Tv3 ) ) )).

thf('.def_pairwise_distinct_cons_case_axiom',axiom,(
    ! [Tv12: $tType,V_x: Tv12,V_xs: ( 'ListOf' @ Tv12 )] :
      ( ( 'pairwise-distinct/1' @ Tv12 @ ( 'cons/2' @ Tv12 @ V_x @ V_xs ) )
    <=> ( ( 'all/2' @ Tv12
          @ ^ [V_y: Tv12] : ( V_x != V_y )
          @ V_xs )
        & ( 'pairwise-distinct/1' @ Tv12 @ V_xs ) ) ) )).

thf('.def_filter_nil_axiom',axiom,(
    ! [Tv8: $tType,V_f: ( Tv8 > $o )] :
      ( ( 'filter/2' @ Tv8 @ V_f @ ( 'nil/0' @ Tv8 ) )
      = ( 'nil/0' @ Tv8 ) ) )).

thf('.def_filter_cons_axiom',axiom,(
    ! [Tv19: $tType,V_f: ( Tv19 > $o ),V_x: Tv19,V_xs: ( 'ListOf' @ Tv19 )] :
      ( ( 'filter/2' @ Tv19 @ V_f @ ( 'cons/2' @ Tv19 @ V_x @ V_xs ) )
      = ( 'if/3' @ ( 'ListOf' @ Tv19 )
        @ ^ [V__: 'Unit'] :
            ( V_f @ V_x )
        @ ( 'cons/2' @ Tv19 @ V_x @ ( 'filter/2' @ Tv19 @ V_f @ V_xs ) )
        @ ( 'filter/2' @ Tv19 @ V_f @ V_xs ) ) ) )).

thf('.def_remove_repetition_nil_case_axiom',axiom,(
    ! [Tv7: $tType] :
      ( ( 'remove-repetition/1' @ Tv7 @ ( 'nil/0' @ Tv7 ) )
      = ( 'nil/0' @ Tv7 ) ) )).

thf('.def_remove_repetition_cons_case_axiom',axiom,(
    ! [Tv16: $tType,V_x: Tv16,V_xs: ( 'ListOf' @ Tv16 )] :
      ( ( 'remove-repetition/1' @ Tv16 @ ( 'cons/2' @ Tv16 @ V_x @ V_xs ) )
      = ( 'cons/2' @ Tv16 @ V_x
        @ ( 'remove-repetition/1' @ Tv16
          @ ( 'filter/2' @ Tv16
            @ ^ [V_y: Tv16] : ( V_x != V_y )
            @ V_xs ) ) ) ) )).

thf('.def_list_int->real_base_axiom',axiom,
    ( ( 'list-int->real/1' @ ( 'nil/0' @ $int ) )
    = ( 'nil/0' @ $real ) )).

thf('.def_list_int->real_rec_axiom',axiom,(
    ! [V_n: $int,V_ns: ( 'ListOf' @ $int )] :
      ( ( 'list-int->real/1' @ ( 'cons/2' @ $int @ V_n @ V_ns ) )
      = ( 'cons/2' @ $real @ ( $to_real @ V_n ) @ ( 'list-int->real/1' @ V_ns ) ) ) )).

thf('_permutations/1_type',type,(
    '_permutations/1': 
      !>[Tv0: $tType] :
        ( ( 'ListOf' @ Tv0 ) > ( 'ListOf' @ ( 'ListOf' @ Tv0 ) ) ) )).

thf('_insert/3_type',type,(
    '_insert/3': 
      !>[Tv0: $tType] :
        ( Tv0 > ( ( 'ListOf' @ Tv0 ) > ( 'ListOf' @ Tv0 ) ) > ( 'ListOf' @ Tv0 ) > ( 'ListOf' @ ( 'ListOf' @ Tv0 ) ) ) )).

thf('.def-insert-nil_axiom',axiom,(
    ! [Tv17: $tType,V_x: Tv17,V_prefix: ( ( 'ListOf' @ Tv17 ) > ( 'ListOf' @ Tv17 ) )] :
      ( ( '_insert/3' @ Tv17 @ V_x @ V_prefix @ ( 'nil/0' @ Tv17 ) )
      = ( 'cons/2' @ ( 'ListOf' @ Tv17 ) @ ( V_prefix @ ( 'cons/2' @ Tv17 @ V_x @ ( 'nil/0' @ Tv17 ) ) ) @ ( 'nil/0' @ ( 'ListOf' @ Tv17 ) ) ) ) )).

thf('.def-insert-rec_axiom',axiom,(
    ! [Tv27: $tType,V_x: Tv27,V_prefix: ( ( 'ListOf' @ Tv27 ) > ( 'ListOf' @ Tv27 ) ),V_s: Tv27,V_suffix: ( 'ListOf' @ Tv27 )] :
      ( ( '_insert/3' @ Tv27 @ V_x @ V_prefix @ ( 'cons/2' @ Tv27 @ V_s @ V_suffix ) )
      = ( 'cons/2' @ ( 'ListOf' @ Tv27 ) @ ( V_prefix @ ( 'cons/2' @ Tv27 @ V_x @ ( 'cons/2' @ Tv27 @ V_s @ V_suffix ) ) )
        @ ( '_insert/3' @ Tv27 @ V_x
          @ ^ [V_tail: ( 'ListOf' @ Tv27 )] :
              ( V_prefix @ ( 'cons/2' @ Tv27 @ V_s @ V_tail ) )
          @ V_suffix ) ) ) )).

thf('.def-permutations-nil_axiom',axiom,(
    ! [Tv10: $tType] :
      ( ( '_permutations/1' @ Tv10 @ ( 'nil/0' @ Tv10 ) )
      = ( 'cons/2' @ ( 'ListOf' @ Tv10 ) @ ( 'nil/0' @ Tv10 ) @ ( 'nil/0' @ ( 'ListOf' @ Tv10 ) ) ) ) )).

thf('.def-permutations-rec_axiom',axiom,(
    ! [Tv26: $tType,V_x: Tv26,V_xs: ( 'ListOf' @ Tv26 )] :
      ( ( '_permutations/1' @ Tv26 @ ( 'cons/2' @ Tv26 @ V_x @ V_xs ) )
      = ( 'foldr1/2' @ ( 'ListOf' @ ( 'ListOf' @ Tv26 ) )
        @ ^ [V_ps1: ( 'ListOf' @ ( 'ListOf' @ Tv26 ) ),V_ps2: ( 'ListOf' @ ( 'ListOf' @ Tv26 ) )] :
            ( 'append/2' @ ( 'ListOf' @ Tv26 ) @ V_ps1 @ V_ps2 )
        @ ( 'map/2' @ ( 'ListOf' @ Tv26 ) @ ( 'ListOf' @ ( 'ListOf' @ Tv26 ) )
          @ ^ [V_ps: ( 'ListOf' @ Tv26 )] :
              ( '_insert/3' @ Tv26 @ V_x
              @ ^ [V_x_: ( 'ListOf' @ Tv26 )] : V_x_
              @ V_ps )
          @ ( '_permutations/1' @ Tv26 @ V_xs ) ) ) ) )).

thf('.def_is_a_permutation_of_nil1_axiom',axiom,(
    ! [Tv6: $tType,V_xs: ( 'ListOf' @ Tv6 )] :
      ( ( 'is-a-permutation-of/2' @ Tv6 @ ( 'nil/0' @ Tv6 ) @ V_xs )
    <=> ( ( 'nil/0' @ Tv6 )
        = V_xs ) ) )).

thf('.def_is_a_permutation_of_nil2_axiom',axiom,(
    ! [Tv6: $tType,V_xs: ( 'ListOf' @ Tv6 )] :
      ( ( 'is-a-permutation-of/2' @ Tv6 @ V_xs @ ( 'nil/0' @ Tv6 ) )
    <=> ( ( 'nil/0' @ Tv6 )
        = V_xs ) ) )).

thf('.def_is_a_permutation_of_len1_1_axiom',axiom,(
    ! [Tv13: $tType,V_xs: ( 'ListOf' @ Tv13 ),V_y: Tv13] :
      ( ( 'is-a-permutation-of/2' @ Tv13 @ ( 'cons/2' @ Tv13 @ V_y @ ( 'nil/0' @ Tv13 ) ) @ V_xs )
    <=> ( ( 'cons/2' @ Tv13 @ V_y @ ( 'nil/0' @ Tv13 ) )
        = V_xs ) ) )).

thf('.def_is_a_permutation_of_len1_2_axiom',axiom,(
    ! [Tv13: $tType,V_xs: ( 'ListOf' @ Tv13 ),V_y: Tv13] :
      ( ( 'is-a-permutation-of/2' @ Tv13 @ V_xs @ ( 'cons/2' @ Tv13 @ V_y @ ( 'nil/0' @ Tv13 ) ) )
    <=> ( ( 'cons/2' @ Tv13 @ V_y @ ( 'nil/0' @ Tv13 ) )
        = V_xs ) ) )).

thf('.def_is_a_permutation_of_len2_1_axiom',axiom,(
    ! [Tv26: $tType,V_xs: ( 'ListOf' @ Tv26 ),V_y1: Tv26,V_y2: Tv26] :
      ( ( 'is-a-permutation-of/2' @ Tv26 @ ( 'cons/2' @ Tv26 @ V_y1 @ ( 'cons/2' @ Tv26 @ V_y2 @ ( 'nil/0' @ Tv26 ) ) ) @ V_xs )
    <=> ( ( ( 'cons/2' @ Tv26 @ V_y1 @ ( 'cons/2' @ Tv26 @ V_y2 @ ( 'nil/0' @ Tv26 ) ) )
          = V_xs )
        | ( ( 'cons/2' @ Tv26 @ V_y2 @ ( 'cons/2' @ Tv26 @ V_y1 @ ( 'nil/0' @ Tv26 ) ) )
          = V_xs ) ) ) )).

thf('.def_is_a_permutation_of_len2_2_axiom',axiom,(
    ! [Tv18: $tType,V_xs: ( 'ListOf' @ Tv18 ),V_y1: Tv18,V_y2: Tv18] :
      ( ( 'is-a-permutation-of/2' @ Tv18 @ V_xs @ ( 'cons/2' @ Tv18 @ V_y1 @ ( 'cons/2' @ Tv18 @ V_y2 @ ( 'nil/0' @ Tv18 ) ) ) )
    <=> ( 'is-a-permutation-of/2' @ Tv18 @ ( 'cons/2' @ Tv18 @ V_y1 @ ( 'cons/2' @ Tv18 @ V_y2 @ ( 'nil/0' @ Tv18 ) ) ) @ V_xs ) ) )).

thf('.def_is_a_permutation_of_len3_1_axiom',axiom,(
    ! [Tv25: $tType,V_xs: ( 'ListOf' @ Tv25 ),V_y1: Tv25,V_y2: Tv25,V_y3: Tv25] :
      ( ( 'is-a-permutation-of/2' @ Tv25 @ ( 'cons/2' @ Tv25 @ V_y1 @ ( 'cons/2' @ Tv25 @ V_y2 @ ( 'cons/2' @ Tv25 @ V_y3 @ ( 'nil/0' @ Tv25 ) ) ) ) @ V_xs )
    <=> ( 'member/2' @ ( 'ListOf' @ Tv25 ) @ V_xs @ ( '_permutations/1' @ Tv25 @ ( 'cons/2' @ Tv25 @ V_y1 @ ( 'cons/2' @ Tv25 @ V_y2 @ ( 'cons/2' @ Tv25 @ V_y3 @ ( 'nil/0' @ Tv25 ) ) ) ) ) ) ) )).

thf('.def_is_a_permutation_of_len3_2_axiom',axiom,(
    ! [Tv23: $tType,V_xs: ( 'ListOf' @ Tv23 ),V_y1: Tv23,V_y2: Tv23,V_y3: Tv23] :
      ( ( 'is-a-permutation-of/2' @ Tv23 @ V_xs @ ( 'cons/2' @ Tv23 @ V_y1 @ ( 'cons/2' @ Tv23 @ V_y2 @ ( 'cons/2' @ Tv23 @ V_y3 @ ( 'nil/0' @ Tv23 ) ) ) ) )
    <=> ( 'is-a-permutation-of/2' @ Tv23 @ ( 'cons/2' @ Tv23 @ V_y1 @ ( 'cons/2' @ Tv23 @ V_y2 @ ( 'cons/2' @ Tv23 @ V_y3 @ ( 'nil/0' @ Tv23 ) ) ) ) @ V_xs ) ) )).

thf('.def_is_a_permutation_of_len4_1_axiom',axiom,(
    ! [Tv30: $tType,V_xs: ( 'ListOf' @ Tv30 ),V_y1: Tv30,V_y2: Tv30,V_y3: Tv30,V_y4: Tv30] :
      ( ( 'is-a-permutation-of/2' @ Tv30 @ ( 'cons/2' @ Tv30 @ V_y1 @ ( 'cons/2' @ Tv30 @ V_y2 @ ( 'cons/2' @ Tv30 @ V_y3 @ ( 'cons/2' @ Tv30 @ V_y4 @ ( 'nil/0' @ Tv30 ) ) ) ) ) @ V_xs )
    <=> ( 'member/2' @ ( 'ListOf' @ Tv30 ) @ V_xs @ ( '_permutations/1' @ Tv30 @ ( 'cons/2' @ Tv30 @ V_y1 @ ( 'cons/2' @ Tv30 @ V_y2 @ ( 'cons/2' @ Tv30 @ V_y3 @ ( 'cons/2' @ Tv30 @ V_y4 @ ( 'nil/0' @ Tv30 ) ) ) ) ) ) ) ) )).

thf('.def_is_a_permutation_of_len4_2_axiom',axiom,(
    ! [Tv28: $tType,V_xs: ( 'ListOf' @ Tv28 ),V_y1: Tv28,V_y2: Tv28,V_y3: Tv28,V_y4: Tv28] :
      ( ( 'is-a-permutation-of/2' @ Tv28 @ V_xs @ ( 'cons/2' @ Tv28 @ V_y1 @ ( 'cons/2' @ Tv28 @ V_y2 @ ( 'cons/2' @ Tv28 @ V_y3 @ ( 'cons/2' @ Tv28 @ V_y4 @ ( 'nil/0' @ Tv28 ) ) ) ) ) )
    <=> ( 'is-a-permutation-of/2' @ Tv28 @ ( 'cons/2' @ Tv28 @ V_y1 @ ( 'cons/2' @ Tv28 @ V_y2 @ ( 'cons/2' @ Tv28 @ V_y3 @ ( 'cons/2' @ Tv28 @ V_y4 @ ( 'nil/0' @ Tv28 ) ) ) ) ) @ V_xs ) ) )).

thf('.def_is_a_permutation_of_cons_axiom',axiom,(
    ! [Tv12: $tType,V_x: Tv12,V_xs: ( 'ListOf' @ Tv12 ),V_lis: ( 'ListOf' @ Tv12 )] :
      ( ( 'is-a-permutation-of/2' @ Tv12 @ ( 'cons/2' @ Tv12 @ V_x @ V_xs ) @ V_lis )
    <=> ( ( 'member/2' @ Tv12 @ V_x @ V_lis )
        & ( 'is-a-permutation-of/2' @ Tv12 @ V_xs @ ( 'delete/2' @ Tv12 @ V_x @ V_lis ) ) ) ) )).

thf('.def_is_a_permutation_of_cons2_axiom',axiom,(
    ! [Tv12: $tType,V_x: Tv12,V_xs: ( 'ListOf' @ Tv12 ),V_lis: ( 'ListOf' @ Tv12 )] :
      ( ( 'is-a-permutation-of/2' @ Tv12 @ V_lis @ ( 'cons/2' @ Tv12 @ V_x @ V_xs ) )
    <=> ( ( 'member/2' @ Tv12 @ V_x @ V_lis )
        & ( 'is-a-permutation-of/2' @ Tv12 @ V_xs @ ( 'delete/2' @ Tv12 @ V_x @ V_lis ) ) ) ) )).

thf('.def-is-subset-list-of_axiom',axiom,(
    ! [Tv8: $tType,V_xs: ( 'ListOf' @ Tv8 ),V_ys: ( 'ListOf' @ Tv8 )] :
      ( ( 'is-subset-list-of/2' @ Tv8 @ V_xs @ V_ys )
    <=> ! [V_x: Tv8] :
          ( ( 'member/2' @ Tv8 @ V_x @ V_xs )
         => ( 'member/2' @ Tv8 @ V_x @ V_ys ) ) ) )).

thf('.def-zip-with-nil1_axiom',axiom,(
    ! [Tv8: $tType,Tv10: $tType,Tv11: $tType,V_f: ( Tv8 > Tv10 > Tv11 ),V_as: ( 'ListOf' @ Tv8 )] :
      ( ( 'zip-with/3' @ Tv10 @ Tv8 @ Tv11 @ V_f @ V_as @ ( 'nil/0' @ Tv10 ) )
      = ( 'nil/0' @ Tv11 ) ) )).

thf('.def-zip-with-nil2_axiom',axiom,(
    ! [Tv7: $tType,Tv10: $tType,Tv11: $tType,V_f: ( Tv10 > Tv7 > Tv11 ),V_bs: ( 'ListOf' @ Tv7 )] :
      ( ( 'zip-with/3' @ Tv7 @ Tv10 @ Tv11 @ V_f @ ( 'nil/0' @ Tv10 ) @ V_bs )
      = ( 'nil/0' @ Tv11 ) ) )).

thf('.def-zip-with-rec_axiom',axiom,(
    ! [Tv24: $tType,Tv25: $tType,Tv26: $tType,V_f: ( Tv25 > Tv24 > Tv26 ),V_a: Tv25,V_as: ( 'ListOf' @ Tv25 ),V_b: Tv24,V_bs: ( 'ListOf' @ Tv24 )] :
      ( ( 'zip-with/3' @ Tv24 @ Tv25 @ Tv26 @ V_f @ ( 'cons/2' @ Tv25 @ V_a @ V_as ) @ ( 'cons/2' @ Tv24 @ V_b @ V_bs ) )
      = ( 'cons/2' @ Tv26 @ ( V_f @ V_a @ V_b ) @ ( 'zip-with/3' @ Tv24 @ Tv25 @ Tv26 @ V_f @ V_as @ V_bs ) ) ) )).

thf('.is-increasing-list-nil_axiom',axiom,
    ( 'is-increasing-list/1' @ ( 'nil/0' @ $real ) )).

thf('.is-increasing-list-1_axiom',axiom,(
    ! [V_x: $real] :
      ( 'is-increasing-list/1' @ ( 'cons/2' @ $real @ V_x @ ( 'nil/0' @ $real ) ) ) )).

thf('.is-increasing-list-cons_axiom',axiom,(
    ! [V_x0: $real,V_x1: $real,V_xs: ( 'ListOf' @ $real )] :
      ( ( 'is-increasing-list/1' @ ( 'cons/2' @ $real @ V_x0 @ ( 'cons/2' @ $real @ V_x1 @ V_xs ) ) )
    <=> ( ( $lesseq @ V_x0 @ V_x1 )
        & ( 'is-increasing-list/1' @ ( 'cons/2' @ $real @ V_x1 @ V_xs ) ) ) ) )).

thf('.is-decreasing-list-nil_axiom',axiom,
    ( 'is-decreasing-list/1' @ ( 'nil/0' @ $real ) )).

thf('.is-decreasing-list-1_axiom',axiom,(
    ! [V_x: $real] :
      ( 'is-decreasing-list/1' @ ( 'cons/2' @ $real @ V_x @ ( 'nil/0' @ $real ) ) ) )).

thf('.is-decreasing-list-cons_axiom',axiom,(
    ! [V_x0: $real,V_x1: $real,V_xs: ( 'ListOf' @ $real )] :
      ( ( 'is-decreasing-list/1' @ ( 'cons/2' @ $real @ V_x0 @ ( 'cons/2' @ $real @ V_x1 @ V_xs ) ) )
    <=> ( ( $greatereq @ V_x0 @ V_x1 )
        & ( 'is-decreasing-list/1' @ ( 'cons/2' @ $real @ V_x1 @ V_xs ) ) ) ) )).

thf('.def-function-composition_axiom',axiom,(
    ! [Tv15: $tType,V_f: ( Tv15 > Tv15 ),V_g: ( Tv15 > Tv15 )] :
      ( ( 'compose/2' @ Tv15 @ Tv15 @ Tv15 @ V_f @ V_g )
      = ( ^ [V_x: Tv15] :
            ( V_f @ ( V_g @ V_x ) ) ) ) )).

thf('.def_is_pair_axiom',axiom,(
    ! [Tv2: $tType,Tv3: $tType,V_ab: ( 'Pair' @ Tv3 @ Tv2 )] :
      ( 'is-pair/1' @ Tv2 @ Tv3 @ V_ab ) )).

thf('.def_is_triple_axiom',axiom,(
    ! [Tv2: $tType,Tv3: $tType,Tv4: $tType,V_abc: ( 'Triple' @ Tv4 @ Tv3 @ Tv2 )] :
      ( 'is-triple/1' @ Tv2 @ Tv3 @ Tv4 @ V_abc ) )).

thf('.def_is_tuple4_axiom',axiom,(
    ! [Tv2: $tType,Tv3: $tType,Tv4: $tType,Tv5: $tType,V_abcd: ( 'Tuple4' @ Tv5 @ Tv4 @ Tv3 @ Tv2 )] :
      ( 'is-tuple4/1' @ Tv2 @ Tv3 @ Tv4 @ Tv5 @ V_abcd ) )).

thf('.def_pair_equality_axiom',axiom,(
    ! [Tv14: $tType,Tv15: $tType,V_a1: Tv14,V_b1: Tv15,V_a2: Tv14,V_b2: Tv15] :
      ( ( ( 'pair/2' @ Tv15 @ Tv14 @ V_a1 @ V_b1 )
        = ( 'pair/2' @ Tv15 @ Tv14 @ V_a2 @ V_b2 ) )
    <=> ( ( V_a1 = V_a2 )
        & ( V_b1 = V_b2 ) ) ) )).

thf('.def_triple_equality_axiom',axiom,(
    ! [Tv19: $tType,Tv20: $tType,Tv21: $tType,V_a1: Tv19,V_b1: Tv20,V_c1: Tv21,V_a2: Tv19,V_b2: Tv20,V_c2: Tv21] :
      ( ( ( 'triple/3' @ Tv21 @ Tv20 @ Tv19 @ V_a1 @ V_b1 @ V_c1 )
        = ( 'triple/3' @ Tv21 @ Tv20 @ Tv19 @ V_a2 @ V_b2 @ V_c2 ) )
    <=> ( ( V_a1 = V_a2 )
        & ( V_b1 = V_b2 )
        & ( V_c1 = V_c2 ) ) ) )).

thf('.def_tuple4_equality_axiom',axiom,(
    ! [Tv24: $tType,Tv25: $tType,Tv26: $tType,Tv27: $tType,V_a1: Tv24,V_b1: Tv25,V_c1: Tv26,V_d1: Tv27,V_a2: Tv24,V_b2: Tv25,V_c2: Tv26,V_d2: Tv27] :
      ( ( ( 'tuple4/4' @ Tv27 @ Tv26 @ Tv25 @ Tv24 @ V_a1 @ V_b1 @ V_c1 @ V_d1 )
        = ( 'tuple4/4' @ Tv27 @ Tv26 @ Tv25 @ Tv24 @ V_a2 @ V_b2 @ V_c2 @ V_d2 ) )
    <=> ( ( V_a1 = V_a2 )
        & ( V_b1 = V_b2 )
        & ( V_c1 = V_c2 )
        & ( V_d1 = V_d2 ) ) ) )).

thf('.def_fst_of_pair_axiom',axiom,(
    ! [Tv8: $tType,Tv9: $tType,V_a: Tv9,V_b: Tv8] :
      ( ( 'fst/1' @ Tv8 @ Tv9 @ ( 'pair/2' @ Tv8 @ Tv9 @ V_a @ V_b ) )
      = V_a ) )).

thf('.def_snd_of_pair_axiom',axiom,(
    ! [Tv8: $tType,Tv9: $tType,V_a: Tv9,V_b: Tv8] :
      ( ( 'snd/1' @ Tv8 @ Tv9 @ ( 'pair/2' @ Tv8 @ Tv9 @ V_a @ V_b ) )
      = V_b ) )).

thf('.def_fst_of_triple_axiom',axiom,(
    ! [Tv10: $tType,Tv11: $tType,Tv12: $tType,V_a: Tv12,V_b: Tv11,V_c: Tv10] :
      ( ( 'fst-of-3/1' @ Tv10 @ Tv11 @ Tv12 @ ( 'triple/3' @ Tv10 @ Tv11 @ Tv12 @ V_a @ V_b @ V_c ) )
      = V_a ) )).

thf('.def_snd_of_triple_axiom',axiom,(
    ! [Tv10: $tType,Tv11: $tType,Tv12: $tType,V_a: Tv12,V_b: Tv11,V_c: Tv10] :
      ( ( 'snd-of-3/1' @ Tv10 @ Tv11 @ Tv12 @ ( 'triple/3' @ Tv10 @ Tv11 @ Tv12 @ V_a @ V_b @ V_c ) )
      = V_b ) )).

thf('.def_third_of_triple_axiom',axiom,(
    ! [Tv10: $tType,Tv11: $tType,Tv12: $tType,V_a: Tv12,V_b: Tv11,V_c: Tv10] :
      ( ( 'third-of-3/1' @ Tv10 @ Tv11 @ Tv12 @ ( 'triple/3' @ Tv10 @ Tv11 @ Tv12 @ V_a @ V_b @ V_c ) )
      = V_c ) )).

thf('.def_fst_of_tuple4_axiom',axiom,(
    ! [Tv12: $tType,Tv13: $tType,Tv14: $tType,Tv15: $tType,V_a: Tv15,V_b: Tv14,V_c: Tv13,V_d: Tv12] :
      ( ( 'fst-of-4/1' @ Tv12 @ Tv13 @ Tv14 @ Tv15 @ ( 'tuple4/4' @ Tv12 @ Tv13 @ Tv14 @ Tv15 @ V_a @ V_b @ V_c @ V_d ) )
      = V_a ) )).

thf('.def_snd_of_tuple4_axiom',axiom,(
    ! [Tv12: $tType,Tv13: $tType,Tv14: $tType,Tv15: $tType,V_a: Tv15,V_b: Tv14,V_c: Tv13,V_d: Tv12] :
      ( ( 'snd-of-4/1' @ Tv12 @ Tv13 @ Tv14 @ Tv15 @ ( 'tuple4/4' @ Tv12 @ Tv13 @ Tv14 @ Tv15 @ V_a @ V_b @ V_c @ V_d ) )
      = V_b ) )).

thf('.def_third_of_tuple4_axiom',axiom,(
    ! [Tv12: $tType,Tv13: $tType,Tv14: $tType,Tv15: $tType,V_a: Tv15,V_b: Tv14,V_c: Tv13,V_d: Tv12] :
      ( ( 'third-of-4/1' @ Tv12 @ Tv13 @ Tv14 @ Tv15 @ ( 'tuple4/4' @ Tv12 @ Tv13 @ Tv14 @ Tv15 @ V_a @ V_b @ V_c @ V_d ) )
      = V_c ) )).

thf('.def_fourth_of_tuple4_axiom',axiom,(
    ! [Tv12: $tType,Tv13: $tType,Tv14: $tType,Tv15: $tType,V_a: Tv15,V_b: Tv14,V_c: Tv13,V_d: Tv12] :
      ( ( 'fourth-of-4/1' @ Tv12 @ Tv13 @ Tv14 @ Tv15 @ ( 'tuple4/4' @ Tv12 @ Tv13 @ Tv14 @ Tv15 @ V_a @ V_b @ V_c @ V_d ) )
      = V_d ) )).

thf('.def_zip_nil1_axiom',axiom,(
    ! [Tv7: $tType,Tv8: $tType,V_xs: ( 'ListOf' @ Tv7 )] :
      ( ( 'zip/2' @ Tv8 @ Tv7 @ V_xs @ ( 'nil/0' @ Tv8 ) )
      = ( 'nil/0' @ ( 'Pair' @ Tv7 @ Tv8 ) ) ) )).

thf('.def_zip_nil2_axiom',axiom,(
    ! [Tv6: $tType,Tv8: $tType,V_ys: ( 'ListOf' @ Tv6 )] :
      ( ( 'zip/2' @ Tv6 @ Tv8 @ ( 'nil/0' @ Tv8 ) @ V_ys )
      = ( 'nil/0' @ ( 'Pair' @ Tv8 @ Tv6 ) ) ) )).

thf('.def_zip_rec_axiom',axiom,(
    ! [Tv19: $tType,Tv20: $tType,V_x: Tv20,V_xs: ( 'ListOf' @ Tv20 ),V_y: Tv19,V_ys: ( 'ListOf' @ Tv19 )] :
      ( ( 'zip/2' @ Tv19 @ Tv20 @ ( 'cons/2' @ Tv20 @ V_x @ V_xs ) @ ( 'cons/2' @ Tv19 @ V_y @ V_ys ) )
      = ( 'cons/2' @ ( 'Pair' @ Tv20 @ Tv19 ) @ ( 'pair/2' @ Tv19 @ Tv20 @ V_x @ V_y ) @ ( 'zip/2' @ Tv19 @ Tv20 @ V_xs @ V_ys ) ) ) )).

thf('.def_append_nil_axiom',axiom,(
    ! [Tv6: $tType,V_ys: ( 'ListOf' @ Tv6 )] :
      ( ( 'append/2' @ Tv6 @ ( 'nil/0' @ Tv6 ) @ V_ys )
      = V_ys ) )).

thf('.def_append_cons_axiom',axiom,(
    ! [Tv12: $tType,V_x: Tv12,V_xs: ( 'ListOf' @ Tv12 ),V_ys: ( 'ListOf' @ Tv12 )] :
      ( ( 'append/2' @ Tv12 @ ( 'cons/2' @ Tv12 @ V_x @ V_xs ) @ V_ys )
      = ( 'cons/2' @ Tv12 @ V_x @ ( 'append/2' @ Tv12 @ V_xs @ V_ys ) ) ) )).

thf('.def-uncurry_axiom',axiom,(
    ! [Tv14: $tType,Tv19: $tType,Tv20: $tType,V_f: ( Tv20 > Tv19 > Tv14 )] :
      ( ( 'uncurry/1' @ Tv20 @ Tv19 @ Tv14 @ V_f )
      = ( ^ [V_p: ( 'Pair' @ Tv20 @ Tv19 )] :
            ( V_f @ ( 'fst/1' @ Tv19 @ Tv20 @ V_p ) @ ( 'snd/1' @ Tv19 @ Tv20 @ V_p ) ) ) ) )).

thf('.def-p-uncurry_axiom',axiom,(
    ! [Tv16: $tType,Tv17: $tType,V_f: ( Tv17 > Tv16 > $o )] :
      ( ( 'p-uncurry/1' @ Tv17 @ Tv16 @ V_f )
      = ( ^ [V_p: ( 'Pair' @ Tv17 @ Tv16 )] :
            ( V_f @ ( 'fst/1' @ Tv16 @ Tv17 @ V_p ) @ ( 'snd/1' @ Tv16 @ Tv17 @ V_p ) ) ) ) )).

thf('.def-all-pairs-cons_axiom',axiom,(
    ! [Tv19: $tType,V_x: Tv19,V_xs: ( 'ListOf' @ Tv19 )] :
      ( ( 'all-pairs/1' @ Tv19 @ ( 'cons/2' @ Tv19 @ V_x @ V_xs ) )
      = ( 'append/2' @ ( 'Pair' @ Tv19 @ Tv19 )
        @ ( 'map/2' @ Tv19 @ ( 'Pair' @ Tv19 @ Tv19 )
          @ ^ [V_y: Tv19] :
              ( 'pair/2' @ Tv19 @ Tv19 @ V_x @ V_y )
          @ V_xs )
        @ ( 'all-pairs/1' @ Tv19 @ V_xs ) ) ) )).

thf('.def-all-pairs-nil_axiom',axiom,(
    ! [Tv6: $tType] :
      ( ( 'all-pairs/1' @ Tv6 @ ( 'nil/0' @ Tv6 ) )
      = ( 'nil/0' @ ( 'Pair' @ Tv6 @ Tv6 ) ) ) )).

thf('.def_conj1_axiom',axiom,(
    ! [Tv10: $tType,V_f: ( Tv10 > $o ),V_g: ( Tv10 > $o )] :
      ( ( 'conj1/2' @ Tv10 @ V_f @ V_g )
      = ( ^ [V_x: Tv10] :
            ( ( V_f @ V_x )
            & ( V_g @ V_x ) ) ) ) )).

thf('.def_conj2_axiom',axiom,(
    ! [Tv5: $tType,Tv18: $tType,V_f: ( Tv18 > Tv5 > $o ),V_g: ( Tv18 > Tv5 > $o )] :
      ( ( 'conj2/2' @ Tv18 @ Tv5 @ V_f @ V_g )
      = ( ^ [V_x: Tv18,V_y: Tv5] :
            ( ( V_f @ V_x @ V_y )
            & ( V_g @ V_x @ V_y ) ) ) ) )).

thf('.def_set_elem_axiom',axiom,(
    ! [Tv7: $tType,V_x: Tv7,V_def: ( Tv7 > $o )] :
      ( ( 'elem/2' @ Tv7 @ V_x @ ( 'set-by-def/1' @ Tv7 @ V_def ) )
    <=> ( V_def @ V_x ) ) )).

thf('.def_set_image_axiom',axiom,(
    ! [Tv18: $tType,Tv19: $tType,V_fun: ( Tv18 > Tv19 ),V_def: ( Tv18 > $o )] :
      ( ( 'image/2' @ Tv18 @ Tv19 @ V_fun @ ( 'set-by-def/1' @ Tv18 @ V_def ) )
      = ( 'set-by-def/1' @ Tv19
        @ ^ [V_x: Tv19] :
          ? [V_y: Tv18] :
            ( ( V_def @ V_y )
            & ( V_x
              = ( V_fun @ V_y ) ) ) ) ) )).

thf('.def_finset_base_axiom',axiom,(
    ! [Tv2: $tType] :
      ( ( 'finset/1' @ Tv2 @ ( 'nil/0' @ Tv2 ) )
      = ( 'set-by-def/1' @ Tv2
        @ ^ [V_x: Tv2] : $false ) ) )).

thf('.def_finset_rec_axiom',axiom,(
    ! [Tv16: $tType,V_x: Tv16,V_xs: ( 'ListOf' @ Tv16 )] :
      ( ( 'finset/1' @ Tv16 @ ( 'cons/2' @ Tv16 @ V_x @ V_xs ) )
      = ( 'set-by-def/1' @ Tv16
        @ ^ [V_y: Tv16] :
            ( ( V_y = V_x )
            | ( 'elem/2' @ Tv16 @ V_y @ ( 'finset/1' @ Tv16 @ V_xs ) ) ) ) ) )).

thf('.def_is_set_axiom',axiom,(
    ! [Tv2: $tType,V_s: ( 'SetOf' @ Tv2 )] :
      ( 'is-set/1' @ Tv2 @ V_s ) )).

thf('.def_set_equality_axiom',axiom,(
    ! [Tv8: $tType,V_f: ( Tv8 > $o ),V_g: ( Tv8 > $o )] :
      ( ( ( 'set-by-def/1' @ Tv8 @ V_f )
        = ( 'set-by-def/1' @ Tv8 @ V_g ) )
    <=> ( V_f = V_g ) ) )).

thf('.def_is_empty_axiom',axiom,(
    ! [Tv5: $tType,V_a: ( 'SetOf' @ Tv5 )] :
      ( ( 'is-empty/1' @ Tv5 @ V_a )
    <=> ! [V_x: Tv5] :
          ~ ( 'elem/2' @ Tv5 @ V_x @ V_a ) ) )).

thf('.def_is_singleton_axiom',axiom,(
    ! [Tv10: $tType,V_a: ( 'SetOf' @ Tv10 )] :
      ( ( 'is-singleton/1' @ Tv10 @ V_a )
    <=> ? [V_x: Tv10] :
          ( V_a
          = ( 'set-by-def/1' @ Tv10
            @ ^ [V_y: Tv10] : ( V_y = V_x ) ) ) ) )).

thf('.def-is-subset-of_axiom',axiom,(
    ! [Tv8: $tType,V_A: ( 'SetOf' @ Tv8 ),V_B: ( 'SetOf' @ Tv8 )] :
      ( ( 'is-subset-of/2' @ Tv8 @ V_A @ V_B )
    <=> ! [V_a: Tv8] :
          ( ( 'elem/2' @ Tv8 @ V_a @ V_A )
         => ( 'elem/2' @ Tv8 @ V_a @ V_B ) ) ) )).

thf('.def-pairwise-disjoint_axiom',axiom,(
    ! [Tv14: $tType,V_A: ( 'SetOf' @ ( 'SetOf' @ Tv14 ) )] :
      ( ( 'pairwise-disjoint/1' @ ( 'SetOf' @ Tv14 ) @ V_A )
    <=> ! [V_x: ( 'SetOf' @ Tv14 ),V_y: ( 'SetOf' @ Tv14 )] :
          ( ( ( V_x != V_y )
            & ( 'elem/2' @ ( 'SetOf' @ Tv14 ) @ V_x @ V_A )
            & ( 'elem/2' @ ( 'SetOf' @ Tv14 ) @ V_y @ V_A ) )
         => ( 'is-empty/1' @ Tv14 @ ( 'set-intersection/2' @ Tv14 @ V_x @ V_y ) ) ) ) )).

thf('.def-complement-of-in_axiom',axiom,(
    ! [Tv12: $tType,V_s: ( 'SetOf' @ Tv12 ),V_u: ( 'SetOf' @ Tv12 )] :
      ( ( 'complement-of-in/2' @ Tv12 @ V_s @ V_u )
      = ( 'set-by-def/1' @ Tv12
        @ ^ [V_x: Tv12] :
            ( ~ ( 'elem/2' @ Tv12 @ V_x @ V_s )
            & ( 'elem/2' @ Tv12 @ V_x @ V_u ) ) ) ) )).

thf('.def-set-union_axiom',axiom,(
    ! [Tv12: $tType,V_s1: ( 'SetOf' @ Tv12 ),V_s2: ( 'SetOf' @ Tv12 )] :
      ( ( 'set-union/2' @ Tv12 @ V_s1 @ V_s2 )
      = ( 'set-by-def/1' @ Tv12
        @ ^ [V_x: Tv12] :
            ( ( 'elem/2' @ Tv12 @ V_x @ V_s1 )
            | ( 'elem/2' @ Tv12 @ V_x @ V_s2 ) ) ) ) )).

thf('.def-set-union-n_axiom',axiom,(
    ! [Tv12: $tType,V_ss: ( 'ListOf' @ ( 'SetOf' @ Tv12 ) )] :
      ( ( 'set-union/1' @ Tv12 @ V_ss )
      = ( 'set-by-def/1' @ Tv12
        @ ^ [V_x: Tv12] :
            ( 'some/2' @ ( 'SetOf' @ Tv12 )
            @ ^ [V_s: ( 'SetOf' @ Tv12 )] :
                ( 'elem/2' @ Tv12 @ V_x @ V_s )
            @ V_ss ) ) ) )).

thf('.def-set-intersection_axiom',axiom,(
    ! [Tv12: $tType,V_s1: ( 'SetOf' @ Tv12 ),V_s2: ( 'SetOf' @ Tv12 )] :
      ( ( 'set-intersection/2' @ Tv12 @ V_s1 @ V_s2 )
      = ( 'set-by-def/1' @ Tv12
        @ ^ [V_x: Tv12] :
            ( ( 'elem/2' @ Tv12 @ V_x @ V_s1 )
            & ( 'elem/2' @ Tv12 @ V_x @ V_s2 ) ) ) ) )).

thf('.def-set-intersection-n_axiom',axiom,(
    ! [Tv12: $tType,V_ss: ( 'ListOf' @ ( 'SetOf' @ Tv12 ) )] :
      ( ( 'set-intersection/1' @ Tv12 @ V_ss )
      = ( 'set-by-def/1' @ Tv12
        @ ^ [V_x: Tv12] :
            ( 'all/2' @ ( 'SetOf' @ Tv12 )
            @ ^ [V_s: ( 'SetOf' @ Tv12 )] :
                ( 'elem/2' @ Tv12 @ V_x @ V_s )
            @ V_ss ) ) ) )).

thf('.def-is-cardinality-of-0_axiom',axiom,(
    ! [Tv5: $tType,V_s: ( 'SetOf' @ Tv5 )] :
      ( ( 'is-cardinality-of/2' @ Tv5 @ 0 @ V_s )
    <=> ( 'is-empty/1' @ Tv5 @ V_s ) ) )).

thf('.def-is-cardinality-of-1_axiom',axiom,(
    ! [Tv5: $tType,V_s: ( 'SetOf' @ Tv5 )] :
      ( ( 'is-cardinality-of/2' @ Tv5 @ 1 @ V_s )
    <=> ( 'is-singleton/1' @ Tv5 @ V_s ) ) )).

thf('.def-is-cardinality-of-2_axiom',axiom,(
    ! [Tv18: $tType,V_s: ( 'SetOf' @ Tv18 )] :
      ( ( 'is-cardinality-of/2' @ Tv18 @ 2 @ V_s )
    <=> ? [V_e1: Tv18,V_e2: Tv18] :
          ( ( 'elem/2' @ Tv18 @ V_e1 @ V_s )
          & ( 'elem/2' @ Tv18 @ V_e2 @ V_s )
          & ( V_e1 != V_e2 )
          & ! [V_e: Tv18] :
              ( ( 'elem/2' @ Tv18 @ V_e @ V_s )
             => ( ( V_e = V_e1 )
                | ( V_e = V_e2 ) ) ) ) ) )).

thf('.def-is-cardinality-of-3_axiom',axiom,(
    ! [Tv31: $tType,V_s: ( 'SetOf' @ Tv31 )] :
      ( ( 'is-cardinality-of/2' @ Tv31 @ 3 @ V_s )
    <=> ? [V_e1: Tv31,V_e2: Tv31,V_e3: Tv31] :
          ( ( 'elem/2' @ Tv31 @ V_e1 @ V_s )
          & ( 'elem/2' @ Tv31 @ V_e2 @ V_s )
          & ( 'elem/2' @ Tv31 @ V_e3 @ V_s )
          & ( 'pairwise-distinct/1' @ Tv31 @ ( 'cons/2' @ Tv31 @ V_e1 @ ( 'cons/2' @ Tv31 @ V_e2 @ ( 'cons/2' @ Tv31 @ V_e3 @ ( 'nil/0' @ Tv31 ) ) ) ) )
          & ! [V_e: Tv31] :
              ( ( 'elem/2' @ Tv31 @ V_e @ V_s )
             => ( ( V_e = V_e1 )
                | ( V_e = V_e2 )
                | ( V_e = V_e3 ) ) ) ) ) )).

thf('.def-is-cardinality-of-4_axiom',axiom,(
    ! [Tv38: $tType,V_s: ( 'SetOf' @ Tv38 )] :
      ( ( 'is-cardinality-of/2' @ Tv38 @ 4 @ V_s )
    <=> ? [V_e1: Tv38,V_e2: Tv38,V_e3: Tv38,V_e4: Tv38] :
          ( ( 'elem/2' @ Tv38 @ V_e1 @ V_s )
          & ( 'elem/2' @ Tv38 @ V_e2 @ V_s )
          & ( 'elem/2' @ Tv38 @ V_e3 @ V_s )
          & ( 'elem/2' @ Tv38 @ V_e4 @ V_s )
          & ( 'pairwise-distinct/1' @ Tv38 @ ( 'cons/2' @ Tv38 @ V_e1 @ ( 'cons/2' @ Tv38 @ V_e2 @ ( 'cons/2' @ Tv38 @ V_e3 @ ( 'cons/2' @ Tv38 @ V_e4 @ ( 'nil/0' @ Tv38 ) ) ) ) ) )
          & ! [V_e: Tv38] :
              ( ( 'elem/2' @ Tv38 @ V_e @ V_s )
             => ( ( V_e = V_e1 )
                | ( V_e = V_e2 )
                | ( V_e = V_e3 )
                | ( V_e = V_e4 ) ) ) ) ) )).

thf('.def-list-is-belong-to-set-nil_axiom',axiom,(
    ! [Tv4: $tType,V_s: ( 'SetOf' @ Tv4 )] :
      ( 'is-list-subset-of/2' @ Tv4 @ ( 'nil/0' @ Tv4 ) @ V_s ) )).

thf('.def-list-is-belong-to-set_axiom',axiom,(
    ! [Tv10: $tType,V_p: Tv10,V_ps: ( 'ListOf' @ Tv10 ),V_s: ( 'SetOf' @ Tv10 )] :
      ( ( 'is-list-subset-of/2' @ Tv10 @ ( 'cons/2' @ Tv10 @ V_p @ V_ps ) @ V_s )
    <=> ( ( 'elem/2' @ Tv10 @ V_p @ V_s )
        & ( 'is-list-subset-of/2' @ Tv10 @ V_ps @ V_s ) ) ) )).

thf('.def-is-upper-bound-of_axiom',axiom,(
    ! [V_ub: $real,V_s: ( $real > $o )] :
      ( ( 'is-upper-bound-of/2' @ V_ub @ ( 'set-by-def/1' @ $real @ V_s ) )
    <=> ! [V_e: $real] :
          ( ( V_s @ V_e )
         => ( $lesseq @ V_e @ V_ub ) ) ) )).

thf('.def-is-lower-bound-of_axiom',axiom,(
    ! [V_lb: $real,V_s: ( $real > $o )] :
      ( ( 'is-lower-bound-of/2' @ V_lb @ ( 'set-by-def/1' @ $real @ V_s ) )
    <=> ! [V_e: $real] :
          ( ( V_s @ V_e )
         => ( $lesseq @ V_lb @ V_e ) ) ) )).

thf('.def-is-sup-of_axiom',axiom,(
    ! [V_s: ( $real > $o ),V_sup: $real] :
      ( ( 'is-sup-of/2' @ V_sup @ ( 'set-by-def/1' @ $real @ V_s ) )
    <=> ( ( 'is-upper-bound-of/2' @ V_sup @ ( 'set-by-def/1' @ $real @ V_s ) )
        & ! [V_ub: $real] :
            ( ( 'is-upper-bound-of/2' @ V_ub @ ( 'set-by-def/1' @ $real @ V_s ) )
           => ( $lesseq @ V_sup @ V_ub ) ) ) ) )).

thf('.def-is-inf-of_axiom',axiom,(
    ! [V_s: ( $real > $o ),V_inf: $real] :
      ( ( 'is-inf-of/2' @ V_inf @ ( 'set-by-def/1' @ $real @ V_s ) )
    <=> ( ( 'is-lower-bound-of/2' @ V_inf @ ( 'set-by-def/1' @ $real @ V_s ) )
        & ! [V_lb: $real] :
            ( ( 'is-lower-bound-of/2' @ V_lb @ ( 'set-by-def/1' @ $real @ V_s ) )
           => ( $lesseq @ V_lb @ V_inf ) ) ) ) )).

thf('.def_is_range_axiom',axiom,(
    ! [Tv2: $tType,V_r: ( 'SetOf' @ Tv2 )] :
      ( 'is-range/1' @ Tv2 @ V_r ) )).

thf('.def_constant_axiom',axiom,(
    ! [V_x: $real] :
      ( 'constant/1' @ V_x ) )).

thf('.def_real_number_axiom',axiom,(
    ! [V_x: $real] :
      ( 'real-number/1' @ V_x ) )).

thf('.def_is_floor_of_axiom',axiom,(
    ! [V_n: $int,V_x: $real] :
      ( ( 'is-floor-of/2' @ V_n @ V_x )
    <=> ( ( $lesseq @ 0.0 @ ( $difference @ V_x @ ( $to_real @ V_n ) ) )
        & ( $less @ ( $difference @ V_x @ ( $to_real @ V_n ) ) @ 1.0 ) ) ) )).

thf('.def_is_someint_axiom',axiom,(
    ! [V_x: $real] :
      ( ( 'is-someint/1' @ V_x )
    <=> ( $is_int @ V_x ) ) )).

thf('.def_is_irrational_axiom',axiom,(
    ! [V_x: $real] :
      ( ( 'is-irrational/1' @ V_x )
    <=> ~ ( $is_rat @ V_x ) ) )).

thf('.def_is_fractional_part_of_axiom',axiom,(
    ! [V_x: $real,V_y: $real] :
      ( ( 'is-fractional-part-of/2' @ V_x @ V_y )
    <=> ? [V_n: $int] :
          ( ( 'is-floor-of/2' @ V_n @ V_y )
          & ( V_x
            = ( $difference @ V_y @ ( $to_real @ V_n ) ) ) ) ) )).

thf('.def_mean_axiom',axiom,(
    ! [V_x: $real,V_y: $real] :
      ( ( 'mean/2' @ V_x @ V_y )
      = ( $quotient @ ( $sum @ V_x @ V_y ) @ 2.0 ) ) )).

thf('.def_geom_mean_axiom',axiom,(
    ! [V_x: $real,V_y: $real] :
      ( ( 'geom-mean/2' @ V_x @ V_y )
      = ( '^/2' @ ( $product @ V_x @ V_y ) @ ( $quotient @ 1.0 @ 2.0 ) ) ) )).

thf('.def-are-triangle-edges_axiom',axiom,(
    ! [V_x: $real,V_y: $real,V_z: $real] :
      ( ( 'are-triangle-edges/3' @ V_x @ V_y @ V_z )
    <=> ( ( $less @ 0.0 @ V_x )
        & ( $less @ 0.0 @ V_y )
        & ( $less @ 0.0 @ V_z )
        & ( $less @ V_x @ ( $sum @ V_y @ V_z ) )
        & ( $less @ V_y @ ( $sum @ V_z @ V_x ) )
        & ( $less @ V_z @ ( $sum @ V_x @ V_y ) ) ) ) )).

thf('.def-binary-min_axiom',axiom,(
    ! [V_x: $real,V_y: $real] :
      ( ( 'min/2' @ V_x @ V_y )
      = ( 'if/3' @ $real
        @ ^ [V__: 'Unit'] :
            ( $less @ V_x @ V_y )
        @ V_x
        @ V_y ) ) )).

thf('.def-binary-max_axiom',axiom,(
    ! [V_x: $real,V_y: $real] :
      ( ( 'max/2' @ V_x @ V_y )
      = ( 'if/3' @ $real
        @ ^ [V__: 'Unit'] :
            ( $less @ V_x @ V_y )
        @ V_y
        @ V_x ) ) )).

thf('.def-list-min-1_axiom',axiom,(
    ! [V_x: $real] :
      ( ( 'list-min/1' @ ( 'cons/2' @ $real @ V_x @ ( 'nil/0' @ $real ) ) )
      = V_x ) )).

thf('.def-list-min-cons_axiom',axiom,(
    ! [V_x0: $real,V_x1: $real,V_xs: ( 'ListOf' @ $real )] :
      ( ( 'list-min/1' @ ( 'cons/2' @ $real @ V_x0 @ ( 'cons/2' @ $real @ V_x1 @ V_xs ) ) )
      = ( 'min/2' @ V_x0 @ ( 'list-min/1' @ ( 'cons/2' @ $real @ V_x1 @ V_xs ) ) ) ) )).

thf('.def-list-max-1_axiom',axiom,(
    ! [V_x: $real] :
      ( ( 'list-max/1' @ ( 'cons/2' @ $real @ V_x @ ( 'nil/0' @ $real ) ) )
      = V_x ) )).

thf('.def-list-max-cons_axiom',axiom,(
    ! [V_x0: $real,V_x1: $real,V_xs: ( 'ListOf' @ $real )] :
      ( ( 'list-max/1' @ ( 'cons/2' @ $real @ V_x0 @ ( 'cons/2' @ $real @ V_x1 @ V_xs ) ) )
      = ( 'max/2' @ V_x0 @ ( 'list-max/1' @ ( 'cons/2' @ $real @ V_x1 @ V_xs ) ) ) ) )).

thf('.def_difference_axiom',axiom,(
    ! [V_x: $real,V_y: $real] :
      ( ( 'difference/1' @ ( 'cons/2' @ $real @ V_x @ ( 'cons/2' @ $real @ V_y @ ( 'nil/0' @ $real ) ) ) )
      = ( 'abs/1' @ ( $difference @ V_x @ V_y ) ) ) )).

thf('.def_sum_nil_axiom',axiom,
    ( ( 'sum/1' @ ( 'nil/0' @ $real ) )
    = 0.0 )).

thf('.def_sum_cons_axiom',axiom,(
    ! [V_x: $real,V_xs: ( 'ListOf' @ $real )] :
      ( ( 'sum/1' @ ( 'cons/2' @ $real @ V_x @ V_xs ) )
      = ( $sum @ V_x @ ( 'sum/1' @ V_xs ) ) ) )).

thf('.def_product_nil_axiom',axiom,
    ( ( 'product/1' @ ( 'nil/0' @ $real ) )
    = 1.0 )).

thf('.def_product_cons_axiom',axiom,(
    ! [V_x: $real,V_xs: ( 'ListOf' @ $real )] :
      ( ( 'product/1' @ ( 'cons/2' @ $real @ V_x @ V_xs ) )
      = ( $product @ V_x @ ( 'product/1' @ V_xs ) ) ) )).

thf('.def_is_abs_of_axiom',axiom,(
    ! [V_x: $real,V_y: $real] :
      ( ( 'is-abs-of/2' @ V_x @ V_y )
    <=> ( ( $lesseq @ 0.0 @ V_x )
        & ( ( V_x = V_y )
          | ( V_x
            = ( $uminus @ V_y ) ) ) ) ) )).

thf('.def_is_function_axiom',axiom,(
    ! [V_f: 'R2R'] :
      ( 'is-function/1' @ V_f ) )).

thf('.def_fun_equality_axiom',axiom,(
    ! [V_f1: ( $real > $real ),V_f2: ( $real > $real )] :
      ( ( ( 'fun/1' @ V_f1 )
        = ( 'fun/1' @ V_f2 ) )
    <=> ( V_f1 = V_f2 ) ) )).

thf('.def_is_constant_func_axiom',axiom,(
    ! [V_f: 'R2R'] :
      ( ( 'is-constant-func/1' @ V_f )
    <=> ? [V_c: $real] :
        ! [V_x: $real] :
          ( V_c
          = ( 'funapp/2' @ V_f @ V_x ) ) ) )).

thf('.def_is_polynominal_axiom',axiom,(
    ! [V_f: 'Polynomial'] :
      ( 'is-polynomial/1' @ V_f ) )).

thf('.def_fun+_axiom',axiom,(
    ! [V_f: 'R2R',V_g: 'R2R'] :
      ( ( 'fun+/2' @ V_f @ V_g )
      = ( 'fun/1'
        @ ^ [V_x: $real] :
            ( $sum @ ( 'funapp/2' @ V_f @ V_x ) @ ( 'funapp/2' @ V_g @ V_x ) ) ) ) )).

thf('.def_fun-_axiom',axiom,(
    ! [V_f: 'R2R',V_g: 'R2R'] :
      ( ( 'fun-/2' @ V_f @ V_g )
      = ( 'fun/1'
        @ ^ [V_x: $real] :
            ( $difference @ ( 'funapp/2' @ V_f @ V_x ) @ ( 'funapp/2' @ V_g @ V_x ) ) ) ) )).

thf('.def_fun*_axiom',axiom,(
    ! [V_f: 'R2R',V_g: 'R2R'] :
      ( ( 'fun*/2' @ V_f @ V_g )
      = ( 'fun/1'
        @ ^ [V_x: $real] :
            ( $product @ ( 'funapp/2' @ V_f @ V_x ) @ ( 'funapp/2' @ V_g @ V_x ) ) ) ) )).

thf('.def_fun-s*_axiom',axiom,(
    ! [V_a: $real,V_f: 'R2R'] :
      ( ( 'fun-s*/2' @ V_a @ V_f )
      = ( 'fun/1'
        @ ^ [V_x: $real] :
            ( $product @ V_a @ ( 'funapp/2' @ V_f @ V_x ) ) ) ) )).

thf('.def-fun-sum-nil_axiom',axiom,
    ( ( 'fun-sum/1' @ ( 'nil/0' @ 'R2R' ) )
    = ( 'fun/1'
      @ ^ [V_x: $real] : 0.0 ) )).

thf('.def-fun-sum-cons_axiom',axiom,(
    ! [V_f: 'R2R',V_fs: ( 'ListOf' @ 'R2R' )] :
      ( ( 'fun-sum/1' @ ( 'cons/2' @ 'R2R' @ V_f @ V_fs ) )
      = ( 'fun+/2' @ V_f @ ( 'fun-sum/1' @ V_fs ) ) ) )).

thf('.def-fun-product-nil_axiom',axiom,
    ( ( 'fun-product/1' @ ( 'nil/0' @ 'R2R' ) )
    = ( 'fun/1'
      @ ^ [V_x: $real] : 1.0 ) )).

thf('.def-fun-product-cons_axiom',axiom,(
    ! [V_f: 'R2R',V_fs: ( 'ListOf' @ 'R2R' )] :
      ( ( 'fun-product/1' @ ( 'cons/2' @ 'R2R' @ V_f @ V_fs ) )
      = ( 'fun*/2' @ V_f @ ( 'fun-product/1' @ V_fs ) ) ) )).

thf('.def-fun-range_axiom',axiom,(
    ! [V_f: 'R2R'] :
      ( ( 'fun-range/1' @ V_f )
      = ( 'set-by-def/1' @ $real
        @ ^ [V_y: $real] :
          ? [V_x: $real] :
            ( V_y
            = ( 'funapp/2' @ V_f @ V_x ) ) ) ) )).

thf('.def_increasing_at_axiom',axiom,(
    ! [V_f: 'R2R',V_x: $real] :
      ( ( 'increasing-at/2' @ V_f @ V_x )
    <=> ( $lesseq @ 0.0 @ ( 'funapp/2' @ ( 'derivative/1' @ V_f ) @ V_x ) ) ) )).

thf('.def_decreasing_at_axiom',axiom,(
    ! [V_f: 'R2R',V_x: $real] :
      ( ( 'decreasing-at/2' @ V_f @ V_x )
    <=> ( $greatereq @ 0.0 @ ( 'funapp/2' @ ( 'derivative/1' @ V_f ) @ V_x ) ) ) )).

thf('.def_mono_increasing_axiom',axiom,(
    ! [V_f: 'R2R'] :
      ( ( 'monotonically-increasing/1' @ V_f )
    <=> ! [V_x: $real] :
          ( $lesseq @ 0.0 @ ( 'funapp/2' @ ( 'derivative/1' @ V_f ) @ V_x ) ) ) )).

thf('.def_mono_decreasing_axiom',axiom,(
    ! [V_f: 'R2R'] :
      ( ( 'monotonically-decreasing/1' @ V_f )
    <=> ! [V_x: $real] :
          ( $greatereq @ 0.0 @ ( 'funapp/2' @ ( 'derivative/1' @ V_f ) @ V_x ) ) ) )).

thf('.def_funapp_axiom',axiom,(
    ! [V_f: ( $real > $real ),V_x: $real] :
      ( ( 'funapp/2' @ ( 'fun/1' @ V_f ) @ V_x )
      = ( V_f @ V_x ) ) )).

thf('.def_derivative_axiom',axiom,(
    ! [V_f: ( $real > $real )] :
      ( ( 'derivative/1' @ ( 'fun/1' @ V_f ) )
      = ( 'fun/1' @ ( 'deriv/1' @ V_f ) ) ) )).

thf('.def_integration_axiom',axiom,(
    ! [V_a: $real,V_b: $real,V_f: ( $real > $real )] :
      ( ( 'integration/3' @ ( 'fun/1' @ V_f ) @ V_a @ V_b )
      = ( 'integral/3' @ V_f @ V_a @ V_b ) ) )).

thf('.def_max_of_axiom',axiom,(
    ! [V_x: $real,V_cfun: ( $real > $o )] :
      ( ( V_x
        = ( 'max-of/1' @ V_cfun ) )
    <=> ( ( V_cfun @ V_x )
        & ! [V_y: $real] :
            ( ( V_cfun @ V_y )
           => ( $lesseq @ V_y @ V_x ) ) ) ) )).

thf('.def_min_of_axiom',axiom,(
    ! [V_x: $real,V_cfun: ( $real > $o )] :
      ( ( V_x
        = ( 'min-of/1' @ V_cfun ) )
    <=> ( ( V_cfun @ V_x )
        & ! [V_y: $real] :
            ( ( V_cfun @ V_y )
           => ( $greatereq @ V_y @ V_x ) ) ) ) )).

thf('.def_maximum_axiom',axiom,(
    ! [V_set: ( 'SetOf' @ $real ),V_max: $real] :
      ( ( 'maximum/2' @ V_set @ V_max )
    <=> ( ( 'elem/2' @ $real @ V_max @ V_set )
        & ! [V_v: $real] :
            ( ( 'elem/2' @ $real @ V_v @ V_set )
           => ( $lesseq @ V_v @ V_max ) ) ) ) )).

thf('.def_minimum_axiom',axiom,(
    ! [V_set: ( 'SetOf' @ $real ),V_min: $real] :
      ( ( 'minimum/2' @ V_set @ V_min )
    <=> ( ( 'elem/2' @ $real @ V_min @ V_set )
        & ! [V_v: $real] :
            ( ( 'elem/2' @ $real @ V_v @ V_set )
           => ( $lesseq @ V_min @ V_v ) ) ) ) )).

thf('.def_maximum_by_given_order_axiom',axiom,(
    ! [Tv15: $tType,V_set: ( 'SetOf' @ Tv15 ),V_order: ( Tv15 > Tv15 > $o ),V_max: Tv15] :
      ( ( 'maximum/3' @ Tv15 @ V_set @ V_order @ V_max )
    <=> ( ( 'elem/2' @ Tv15 @ V_max @ V_set )
        & ! [V_v: Tv15] :
            ( ( 'elem/2' @ Tv15 @ V_v @ V_set )
           => ( ( V_max = V_v )
              | ( V_order @ V_v @ V_max ) ) ) ) ) )).

thf('.def_minimum_by_given_order_axiom',axiom,(
    ! [Tv15: $tType,V_set: ( 'SetOf' @ Tv15 ),V_order: ( Tv15 > Tv15 > $o ),V_min: Tv15] :
      ( ( 'minimum/3' @ Tv15 @ V_set @ V_order @ V_min )
    <=> ( ( 'elem/2' @ Tv15 @ V_min @ V_set )
        & ! [V_v: Tv15] :
            ( ( 'elem/2' @ Tv15 @ V_v @ V_set )
           => ( ( V_min = V_v )
              | ( V_order @ V_min @ V_v ) ) ) ) ) )).

thf('.def-fun-convex-upward-parabola-in-region_axiom',axiom,(
    ! [V_a: $real,V_b: $real,V_c: $real,V_region: ( 'SetOf' @ $real )] :
      ( ( 'fun-convex-upward/2' @ ( 'poly-fun/1' @ ( 'cons/2' @ $real @ V_c @ ( 'cons/2' @ $real @ V_b @ ( 'cons/2' @ $real @ V_a @ ( 'nil/0' @ $real ) ) ) ) ) @ V_region )
    <=> ( $greater @ 0.0 @ V_a ) ) )).

thf('.def-fun-convex-upward-parabola_axiom',axiom,(
    ! [V_a: $real,V_b: $real,V_c: $real] :
      ( ( 'fun-convex-upward/1' @ ( 'poly-fun/1' @ ( 'cons/2' @ $real @ V_c @ ( 'cons/2' @ $real @ V_b @ ( 'cons/2' @ $real @ V_a @ ( 'nil/0' @ $real ) ) ) ) ) )
    <=> ( $greater @ 0.0 @ V_a ) ) )).

thf('.def-fun-convex-downward-parabola-in-region_axiom',axiom,(
    ! [V_a: $real,V_b: $real,V_c: $real,V_region: ( 'SetOf' @ $real )] :
      ( ( 'fun-convex-downward/2' @ ( 'poly-fun/1' @ ( 'cons/2' @ $real @ V_c @ ( 'cons/2' @ $real @ V_b @ ( 'cons/2' @ $real @ V_a @ ( 'nil/0' @ $real ) ) ) ) ) @ V_region )
    <=> ( $less @ 0.0 @ V_a ) ) )).

thf('.def-fun-convex-downward-parabola_axiom',axiom,(
    ! [V_a: $real,V_b: $real,V_c: $real] :
      ( ( 'fun-convex-downward/1' @ ( 'poly-fun/1' @ ( 'cons/2' @ $real @ V_c @ ( 'cons/2' @ $real @ V_b @ ( 'cons/2' @ $real @ V_a @ ( 'nil/0' @ $real ) ) ) ) ) )
    <=> ( $less @ 0.0 @ V_a ) ) )).

thf('.def-fun-convex-upward-in-region_axiom',axiom,(
    ! [V_f: 'R2R',V_region: ( 'SetOf' @ $real )] :
      ( ( 'fun-convex-upward/2' @ V_f @ V_region )
    <=> ! [V_x1: $real,V_x2: $real] :
          ( ( ( 'elem/2' @ $real @ V_x1 @ V_region )
            & ( 'elem/2' @ $real @ V_x2 @ V_region ) )
         => ! [V_k: $real] :
              ( ( ( $lesseq @ 0.0 @ V_k )
                & ( $lesseq @ V_k @ 1.0 ) )
             => ( $lesseq @ ( $sum @ ( $product @ V_k @ ( 'funapp/2' @ V_f @ V_x1 ) ) @ ( $product @ ( $difference @ 1.0 @ V_k ) @ ( 'funapp/2' @ V_f @ V_x2 ) ) ) @ ( 'funapp/2' @ V_f @ ( $sum @ ( $product @ V_k @ V_x1 ) @ ( $product @ ( $difference @ 1.0 @ V_k ) @ V_x2 ) ) ) ) ) ) ) )).

thf('.def-fun-convex-upward-everywhere_axiom',axiom,(
    ! [V_f: 'R2R'] :
      ( ( 'fun-convex-upward/1' @ V_f )
    <=> ! [V_x1: $real,V_x2: $real,V_k: $real] :
          ( ( ( $lesseq @ 0.0 @ V_k )
            & ( $lesseq @ V_k @ 1.0 ) )
         => ( $lesseq @ ( $sum @ ( $product @ V_k @ ( 'funapp/2' @ V_f @ V_x1 ) ) @ ( $product @ ( $difference @ 1.0 @ V_k ) @ ( 'funapp/2' @ V_f @ V_x2 ) ) ) @ ( 'funapp/2' @ V_f @ ( $sum @ ( $product @ V_k @ V_x1 ) @ ( $product @ ( $difference @ 1.0 @ V_k ) @ V_x2 ) ) ) ) ) ) )).

thf('.def-fun-convex-downward-in-region_axiom',axiom,(
    ! [V_f: 'R2R',V_region: ( 'SetOf' @ $real )] :
      ( ( 'fun-convex-downward/2' @ V_f @ V_region )
    <=> ( 'fun-convex-upward/2' @ ( 'fun-s*/2' @ -1.0 @ V_f ) @ V_region ) ) )).

thf('.def-fun-convex-downward-everywhere_axiom',axiom,(
    ! [V_f: 'R2R'] :
      ( ( 'fun-convex-downward/1' @ V_f )
    <=> ( 'fun-convex-upward/1' @ ( 'fun-s*/2' @ -1.0 @ V_f ) ) ) )).

thf('.def-converge_axiom',axiom,(
    ! [V_f: 'R2R',V_a: $real,V_b: $real] :
      ( ( 'converge/3' @ V_f @ V_a @ V_b )
    <=> ! [V_e: $real] :
          ( ( $greater @ V_e @ 0.0 )
         => ? [V_d: $real] :
              ( ( $greater @ V_d @ 0.0 )
              & ! [V_x: $real] :
                  ( ( $less @ ( 'abs/1' @ ( $difference @ V_x @ V_a ) ) @ V_d )
                 => ( $less @ ( 'abs/1' @ ( $difference @ ( 'funapp/2' @ V_f @ V_x ) @ V_b ) ) @ V_e ) ) ) ) ) )).

thf('.def-converge-plus_axiom',axiom,(
    ! [V_f: 'R2R',V_a: $real,V_b: $real] :
      ( ( 'converge-plus/3' @ V_f @ V_a @ V_b )
    <=> ! [V_e: $real] :
          ( ( $greater @ V_e @ 0.0 )
         => ? [V_d: $real] :
              ( ( $greater @ V_d @ 0.0 )
              & ! [V_x: $real] :
                  ( ( ( $less @ V_a @ V_x )
                    & ( $less @ ( $difference @ V_x @ V_a ) @ V_d ) )
                 => ( $less @ ( 'abs/1' @ ( $difference @ ( 'funapp/2' @ V_f @ V_x ) @ V_b ) ) @ V_e ) ) ) ) ) )).

thf('.def-converge-minus_axiom',axiom,(
    ! [V_f: 'R2R',V_a: $real,V_b: $real] :
      ( ( 'converge-minus/3' @ V_f @ V_a @ V_b )
    <=> ! [V_e: $real] :
          ( ( $greater @ V_e @ 0.0 )
         => ? [V_d: $real] :
              ( ( $greater @ V_d @ 0.0 )
              & ! [V_x: $real] :
                  ( ( ( $less @ V_x @ V_a )
                    & ( $less @ ( $difference @ V_a @ V_x ) @ V_d ) )
                 => ( $less @ ( 'abs/1' @ ( $difference @ ( 'funapp/2' @ V_f @ V_x ) @ V_b ) ) @ V_e ) ) ) ) ) )).

thf('.def-converge-plus-inf_axiom',axiom,(
    ! [V_f: 'R2R',V_b: $real] :
      ( ( 'converge-plus-inf/2' @ V_f @ V_b )
    <=> ! [V_e: $real] :
          ( ( $greater @ V_e @ 0.0 )
         => ? [V_M: $real] :
              ( ( $greater @ V_M @ 0.0 )
              & ! [V_x: $real] :
                  ( ( $less @ V_M @ V_x )
                 => ( $less @ ( 'abs/1' @ ( $difference @ ( 'funapp/2' @ V_f @ V_x ) @ V_b ) ) @ V_e ) ) ) ) ) )).

thf('.def-converge-minus-inf_axiom',axiom,(
    ! [V_f: 'R2R',V_b: $real] :
      ( ( 'converge-minus-inf/2' @ V_f @ V_b )
    <=> ! [V_e: $real] :
          ( ( $greater @ V_e @ 0.0 )
         => ? [V_M: $real] :
              ( ( $less @ V_M @ 0.0 )
              & ! [V_x: $real] :
                  ( ( $less @ V_x @ V_M )
                 => ( $less @ ( 'abs/1' @ ( $difference @ ( 'funapp/2' @ V_f @ V_x ) @ V_b ) ) @ V_e ) ) ) ) ) )).

thf('.def-convergence-to-eq_axiom',axiom,(
    ! [V_a: $real,V_b: $real] :
      ( ( ( 'convergence-to/1' @ V_a )
        = ( 'convergence-to/1' @ V_b ) )
    <=> ( V_a = V_b ) ) )).

thf('.def-convergence-divergence-neq-1_axiom',axiom,(
    ! [V_a: $real] :
      ( ( ( 'convergence-to/1' @ V_a )
        = 'divergence-to-minus-inf/0' )
    <=> $false ) )).

thf('.def-convergence-divergence-neq-2_axiom',axiom,(
    ! [V_a: $real] :
      ( ( ( 'convergence-to/1' @ V_a )
        = 'divergence-to-plus-inf/0' )
    <=> $false ) )).

thf('.def-limit-converge_axiom',axiom,(
    ! [V_f: 'R2R',V_a: $real,V_c: $real] :
      ( ( ( 'limit/2' @ V_f @ ( 'tends-to/1' @ V_a ) )
        = ( 'convergence-to/1' @ V_c ) )
    <=> ( 'converge/3' @ V_f @ V_a @ V_c ) ) )).

thf('.def-left-hand-limit-converge_axiom',axiom,(
    ! [V_f: 'R2R',V_a: $real,V_c: $real] :
      ( ( ( 'limit/2' @ V_f @ ( 'tends-to-from-left/1' @ V_a ) )
        = ( 'convergence-to/1' @ V_c ) )
    <=> ( 'converge-minus/3' @ V_f @ V_a @ V_c ) ) )).

thf('.def-right-hand-limit-converge_axiom',axiom,(
    ! [V_f: 'R2R',V_a: $real,V_c: $real] :
      ( ( ( 'limit/2' @ V_f @ ( 'tends-to-from-right/1' @ V_a ) )
        = ( 'convergence-to/1' @ V_c ) )
    <=> ( 'converge-plus/3' @ V_f @ V_a @ V_c ) ) )).

thf('.def-limit-converge-as-x-tends-to-plus-inf_axiom',axiom,(
    ! [V_f: 'R2R',V_c: $real] :
      ( ( ( 'limit/2' @ V_f @ 'tends-to-plus-inf/0' )
        = ( 'convergence-to/1' @ V_c ) )
    <=> ( 'converge-plus-inf/2' @ V_f @ V_c ) ) )).

thf('.def-limit-converge-as-x-tends-to-minus-inf_axiom',axiom,(
    ! [V_f: 'R2R',V_c: $real] :
      ( ( ( 'limit/2' @ V_f @ 'tends-to-minus-inf/0' )
        = ( 'convergence-to/1' @ V_c ) )
    <=> ( 'converge-minus-inf/2' @ V_f @ V_c ) ) )).

thf('.def-divergence-to-plus-inf-as-x-tends-to-plus-inf_axiom',axiom,(
    ! [V_f: 'R2R'] :
      ( ( ( 'limit/2' @ V_f @ 'tends-to-plus-inf/0' )
        = 'divergence-to-plus-inf/0' )
    <=> ! [V_y: $real] :
        ? [V_m: $real] :
        ! [V_x: $real] :
          ( ( $less @ V_m @ V_x )
         => ( $less @ V_y @ ( 'funapp/2' @ V_f @ V_x ) ) ) ) )).

thf('.def-divergence-to-plus-inf-as-x-tends-to-minus-inf_axiom',axiom,(
    ! [V_f: 'R2R'] :
      ( ( ( 'limit/2' @ V_f @ 'tends-to-minus-inf/0' )
        = 'divergence-to-plus-inf/0' )
    <=> ! [V_y: $real] :
        ? [V_m: $real] :
        ! [V_x: $real] :
          ( ( $less @ V_x @ V_m )
         => ( $less @ V_y @ ( 'funapp/2' @ V_f @ V_x ) ) ) ) )).

thf('.def-divergence-to-plus-inf-as-x-tends-to-c-from-below_axiom',axiom,(
    ! [V_f: 'R2R',V_c: $real] :
      ( ( ( 'limit/2' @ V_f @ ( 'tends-to-from-left/1' @ V_c ) )
        = 'divergence-to-plus-inf/0' )
    <=> ! [V_y: $real] :
        ? [V_e: $real] :
          ( ( $less @ 0.0 @ V_e )
          & ! [V_x: $real] :
              ( ( ( $less @ ( $difference @ V_c @ V_e ) @ V_x )
                & ( $less @ V_x @ V_c ) )
             => ( $less @ V_y @ ( 'funapp/2' @ V_f @ V_x ) ) ) ) ) )).

thf('.def-divergence-to-plus-inf-as-x-tends-to-c-from-above_axiom',axiom,(
    ! [V_f: 'R2R',V_c: $real] :
      ( ( ( 'limit/2' @ V_f @ ( 'tends-to-from-right/1' @ V_c ) )
        = 'divergence-to-plus-inf/0' )
    <=> ! [V_y: $real] :
        ? [V_e: $real] :
          ( ( $less @ 0.0 @ V_e )
          & ! [V_x: $real] :
              ( ( ( $less @ V_c @ V_x )
                & ( $less @ V_x @ ( $sum @ V_c @ V_e ) ) )
             => ( $less @ V_y @ ( 'funapp/2' @ V_f @ V_x ) ) ) ) ) )).

thf('.def-divergence-to-minus-inf-as-x-tends-to-plus-inf_axiom',axiom,(
    ! [V_f: 'R2R'] :
      ( ( ( 'limit/2' @ V_f @ 'tends-to-plus-inf/0' )
        = 'divergence-to-minus-inf/0' )
    <=> ! [V_y: $real] :
        ? [V_m: $real] :
        ! [V_x: $real] :
          ( ( $less @ V_m @ V_x )
         => ( $less @ ( 'funapp/2' @ V_f @ V_x ) @ V_y ) ) ) )).

thf('.def-divergence-to-minus-inf-as-x-tends-to-minus-inf_axiom',axiom,(
    ! [V_f: 'R2R'] :
      ( ( ( 'limit/2' @ V_f @ 'tends-to-minus-inf/0' )
        = 'divergence-to-minus-inf/0' )
    <=> ! [V_y: $real] :
        ? [V_m: $real] :
        ! [V_x: $real] :
          ( ( $less @ V_x @ V_m )
         => ( $less @ ( 'funapp/2' @ V_f @ V_x ) @ V_y ) ) ) )).

thf('.def-divergence-to-minus-inf-as-x-tends-to-c-from-below_axiom',axiom,(
    ! [V_f: 'R2R',V_c: $real] :
      ( ( ( 'limit/2' @ V_f @ ( 'tends-to-from-left/1' @ V_c ) )
        = 'divergence-to-minus-inf/0' )
    <=> ! [V_y: $real] :
        ? [V_e: $real] :
          ( ( $less @ 0.0 @ V_e )
          & ! [V_x: $real] :
              ( ( ( $less @ ( $difference @ V_c @ V_e ) @ V_x )
                & ( $less @ V_x @ V_c ) )
             => ( $less @ ( 'funapp/2' @ V_f @ V_x ) @ V_y ) ) ) ) )).

thf('.def-divergence-to-minus-inf-as-x-tends-to-c-from-above_axiom',axiom,(
    ! [V_f: 'R2R',V_c: $real] :
      ( ( ( 'limit/2' @ V_f @ ( 'tends-to-from-right/1' @ V_c ) )
        = 'divergence-to-minus-inf/0' )
    <=> ! [V_y: $real] :
        ? [V_e: $real] :
          ( ( $less @ 0.0 @ V_e )
          & ! [V_x: $real] :
              ( ( ( $less @ V_c @ V_x )
                & ( $less @ V_x @ ( $sum @ V_c @ V_e ) ) )
             => ( $less @ ( 'funapp/2' @ V_f @ V_x ) @ V_y ) ) ) ) )).

thf('.def-limit-value-eq_axiom',axiom,(
    ! [V_f1: 'R2R',V_tends_to_1: 'TendsToValue',V_f2: 'R2R',V_tends_to_2: 'TendsToValue'] :
      ( ( ( 'limit/2' @ V_f1 @ V_tends_to_1 )
        = ( 'limit/2' @ V_f2 @ V_tends_to_2 ) )
    <=> ( ? [V_c: $real] :
            ( ( ( 'limit/2' @ V_f1 @ V_tends_to_1 )
              = ( 'convergence-to/1' @ V_c ) )
            & ( ( 'limit/2' @ V_f2 @ V_tends_to_2 )
              = ( 'convergence-to/1' @ V_c ) ) )
        | ( ( ( 'limit/2' @ V_f1 @ V_tends_to_1 )
            = 'divergence-to-plus-inf/0' )
          & ( ( 'limit/2' @ V_f2 @ V_tends_to_2 )
            = 'divergence-to-plus-inf/0' ) )
        | ( ( ( 'limit/2' @ V_f1 @ V_tends_to_1 )
            = 'divergence-to-minus-inf/0' )
          & ( ( 'limit/2' @ V_f2 @ V_tends_to_2 )
            = 'divergence-to-minus-inf/0' ) ) ) ) )).

thf('.def_is_equation_axiom',axiom,(
    ! [V_e: 'Equation'] :
      ( 'is-equation/1' @ V_e ) )).

thf('.def_has_real_solution_axiom',axiom,(
    ! [V_f: ( $real > $real )] :
      ( ( 'has-real-solution/1' @ ( 'equation/1' @ V_f ) )
    <=> ? [V_x: $real] :
          ( 0.0
          = ( V_f @ V_x ) ) ) )).

thf('.def_is_solution_of_axiom',axiom,(
    ! [V_f: ( $real > $real ),V_x: $real] :
      ( ( 'is-solution-of/2' @ V_x @ ( 'equation/1' @ V_f ) )
    <=> ( 0.0
        = ( V_f @ V_x ) ) ) )).

thf('.def_are_solutions_of_linear_eq_axiom',axiom,(
    ! [V_a: $real,V_b: $real,V_xs: ( 'ListOf' @ $real )] :
      ( ( 'are-solutions-of/2' @ V_xs @ ( 'poly-equation/1' @ ( 'cons/2' @ $real @ V_b @ ( 'cons/2' @ $real @ V_a @ ( 'nil/0' @ $real ) ) ) ) )
    <=> ( ( V_a != 0.0 )
        & ( V_xs
          = ( 'cons/2' @ $real @ ( $quotient @ V_b @ V_a ) @ ( 'nil/0' @ $real ) ) ) ) ) )).

thf('.def_are_solutions_of_quadra_eq_axiom',axiom,(
    ! [V_a: $real,V_b: $real,V_c: $real,V_xs: ( 'ListOf' @ $real )] :
      ( ( 'are-solutions-of/2' @ V_xs @ ( 'poly-equation/1' @ ( 'cons/2' @ $real @ V_c @ ( 'cons/2' @ $real @ V_b @ ( 'cons/2' @ $real @ V_a @ ( 'nil/0' @ $real ) ) ) ) ) )
    <=> ( ( ( V_a = 0.0 )
          & ( 'are-solutions-of/2' @ V_xs @ ( 'poly-equation/1' @ ( 'cons/2' @ $real @ V_c @ ( 'cons/2' @ $real @ V_b @ ( 'nil/0' @ $real ) ) ) ) ) )
        | ( ( V_a != 0.0 )
          & ( ( $difference @ ( '^/2' @ V_b @ 2.0 ) @ ( $product @ 4.0 @ ( $product @ V_a @ V_c ) ) )
            = 0.0 )
          & ( V_xs
            = ( 'cons/2' @ $real @ ( $uminus @ ( $quotient @ V_b @ ( $product @ 2.0 @ V_a ) ) ) @ ( 'nil/0' @ $real ) ) ) )
        | ( ( V_a != 0.0 )
          & ( $greater @ ( $difference @ ( '^/2' @ V_b @ 2.0 ) @ ( $product @ 4.0 @ ( $product @ V_a @ V_c ) ) ) @ 0.0 )
          & ( ( V_xs
              = ( 'cons/2' @ $real @ ( $quotient @ ( $sum @ ( $uminus @ V_b ) @ ( 'sqrt/1' @ ( $difference @ ( '^/2' @ V_b @ 2.0 ) @ ( $product @ 4.0 @ ( $product @ V_a @ V_c ) ) ) ) ) @ ( $product @ 2.0 @ V_a ) ) @ ( 'cons/2' @ $real @ ( $quotient @ ( $difference @ ( $uminus @ V_b ) @ ( 'sqrt/1' @ ( $difference @ ( '^/2' @ V_b @ 2.0 ) @ ( $product @ 4.0 @ ( $product @ V_a @ V_c ) ) ) ) ) @ ( $product @ 2.0 @ V_a ) ) @ ( 'nil/0' @ $real ) ) ) )
            | ( V_xs
              = ( 'cons/2' @ $real @ ( $quotient @ ( $difference @ ( $uminus @ V_b ) @ ( 'sqrt/1' @ ( $difference @ ( '^/2' @ V_b @ 2.0 ) @ ( $product @ 4.0 @ ( $product @ V_a @ V_c ) ) ) ) ) @ ( $product @ 2.0 @ V_a ) ) @ ( 'cons/2' @ $real @ ( $quotient @ ( $sum @ ( $uminus @ V_b ) @ ( 'sqrt/1' @ ( $difference @ ( '^/2' @ V_b @ 2.0 ) @ ( $product @ 4.0 @ ( $product @ V_a @ V_c ) ) ) ) ) @ ( $product @ 2.0 @ V_a ) ) @ ( 'nil/0' @ $real ) ) ) ) ) )
        | ( ( V_a != 0.0 )
          & ( $less @ ( $difference @ ( '^/2' @ V_b @ 2.0 ) @ ( $product @ 4.0 @ ( $product @ V_a @ V_c ) ) ) @ 0.0 )
          & ( V_xs
            = ( 'nil/0' @ $real ) ) ) ) ) )).

thf('.def_are_solutions_of_axiom',axiom,(
    ! [V_f: ( $real > $real ),V_xs: ( 'ListOf' @ $real )] :
      ( ( 'are-solutions-of/2' @ V_xs @ ( 'equation/1' @ V_f ) )
    <=> ! [V_x: $real] :
          ( ( 'member/2' @ $real @ V_x @ V_xs )
        <=> ( ( V_f @ V_x )
            = 0.0 ) ) ) )).

thf('.def_is_real_solution_of_axiom',axiom,(
    ! [V_eq: 'Equation',V_x: $real] :
      ( ( 'is-real-solution-of/2' @ V_x @ V_eq )
    <=> ( 'is-solution-of/2' @ V_x @ V_eq ) ) )).

thf('.def_are_real_solutions_of_axiom',axiom,(
    ! [V_eq: 'Equation',V_xs: ( 'ListOf' @ $real )] :
      ( ( 'are-real-solutions-of/2' @ V_xs @ V_eq )
    <=> ( 'are-solutions-of/2' @ V_xs @ V_eq ) ) )).

thf('.def_is_equation_deg_of_axiom',axiom,(
    ! [V_n: $int,V_f: ( $real > $real )] :
      ( ( 'is-equation-deg-of/2' @ V_n @ ( 'equation/1' @ V_f ) )
    <=> ( 'is-fun-deg-of/2' @ V_n @ ( 'fun/1' @ V_f ) ) ) )).

thf('.def_has_real_solution_poly_axiom',axiom,(
    ! [V_cs: ( 'ListOf' @ $real )] :
      ( ( 'has-real-solution/1' @ ( 'poly-equation/1' @ V_cs ) )
    <=> ? [V_x: $real] :
          ( 0.0
          = ( 'poly-value/2' @ V_cs @ V_x ) ) ) )).

thf('.def_is_solution_of_poly_axiom',axiom,(
    ! [V_cs: ( 'ListOf' @ $real ),V_x: $real] :
      ( ( 'is-solution-of/2' @ V_x @ ( 'poly-equation/1' @ V_cs ) )
    <=> ( 0.0
        = ( 'poly-value/2' @ V_cs @ V_x ) ) ) )).

thf('.def_are_solutions_of_poly_axiom',axiom,(
    ! [V_cs: ( 'ListOf' @ $real ),V_xs: ( 'ListOf' @ $real )] :
      ( ( 'are-solutions-of/2' @ V_xs @ ( 'poly-equation/1' @ V_cs ) )
    <=> ! [V_x: $real] :
          ( ( 'member/2' @ $real @ V_x @ V_xs )
        <=> ( 0.0
            = ( 'poly-value/2' @ V_cs @ V_x ) ) ) ) )).

thf('.def_is_equation_deg_of_poly_axiom',axiom,(
    ! [V_n: $int,V_cs: ( 'ListOf' @ $real )] :
      ( ( 'is-equation-deg-of/2' @ V_n @ ( 'poly-equation/1' @ V_cs ) )
    <=> ( V_n
        = ( 'poly-deg/1' @ V_cs ) ) ) )).

thf('.def-equation-determinant_axiom',axiom,(
    ! [V_a: $real,V_b: $real,V_c: $real] :
      ( ( 'equation-determinant/1' @ ( 'poly-equation/1' @ ( 'cons/2' @ $real @ V_c @ ( 'cons/2' @ $real @ V_b @ ( 'cons/2' @ $real @ V_a @ ( 'nil/0' @ $real ) ) ) ) ) )
      = ( $difference @ ( '^/2' @ V_b @ 2.0 ) @ ( $product @ 4.0 @ ( $product @ V_a @ V_c ) ) ) ) )).

thf('.def_fun_min_axiom',axiom,(
    ! [V_f: ( $real > $real ),V_r: ( 'SetOf' @ $real ),V_xm: $real,V_ym: $real] :
      ( ( 'func-min/4' @ ( 'fun/1' @ V_f ) @ V_r @ V_xm @ V_ym )
    <=> ( ! [V_x: $real] :
            ( ( 'elem/2' @ $real @ V_x @ V_r )
           => ( $lesseq @ V_ym @ ( V_f @ V_x ) ) )
        & ( 'elem/2' @ $real @ V_xm @ V_r )
        & ( V_ym
          = ( V_f @ V_xm ) ) ) ) )).

thf('.def_fun_max_axiom',axiom,(
    ! [V_f: ( $real > $real ),V_r: ( 'SetOf' @ $real ),V_xm: $real,V_ym: $real] :
      ( ( 'func-max/4' @ ( 'fun/1' @ V_f ) @ V_r @ V_xm @ V_ym )
    <=> ( ! [V_x: $real] :
            ( ( 'elem/2' @ $real @ V_x @ V_r )
           => ( $greatereq @ V_ym @ ( V_f @ V_x ) ) )
        & ( 'elem/2' @ $real @ V_xm @ V_r )
        & ( V_ym
          = ( V_f @ V_xm ) ) ) ) )).

thf('.def_fun_min_no_domain_restriction_axiom',axiom,(
    ! [V_f: ( $real > $real ),V_xm: $real,V_ym: $real] :
      ( ( 'func-min/3' @ ( 'fun/1' @ V_f ) @ V_xm @ V_ym )
    <=> ( ! [V_x: $real] :
            ( $lesseq @ V_ym @ ( V_f @ V_x ) )
        & ( V_ym
          = ( V_f @ V_xm ) ) ) ) )).

thf('.def_fun_max_no_domain_restriction_axiom',axiom,(
    ! [V_f: ( $real > $real ),V_xm: $real,V_ym: $real] :
      ( ( 'func-max/3' @ ( 'fun/1' @ V_f ) @ V_xm @ V_ym )
    <=> ( ! [V_x: $real] :
            ( $greatereq @ V_ym @ ( V_f @ V_x ) )
        & ( V_ym
          = ( V_f @ V_xm ) ) ) ) )).

thf('.def_func_maximal_axiom',axiom,(
    ! [V_f: 'R2R',V_xm: $real,V_ym: $real] :
      ( ( 'func-maximal/3' @ V_f @ V_xm @ V_ym )
    <=> ( ( 0.0
          = ( 'funapp/2' @ ( 'derivative/1' @ V_f ) @ V_xm ) )
        & ? [V_e: $real] :
            ( ( $less @ 0.0 @ V_e )
            & ( 'func-max/4' @ V_f @ ( 'range/2' @ ( 'ep-open/1' @ ( $difference @ V_xm @ V_e ) ) @ ( 'ep-open/1' @ ( $sum @ V_xm @ V_e ) ) ) @ V_xm @ V_ym ) ) ) ) )).

thf('.def_func_minimal_axiom',axiom,(
    ! [V_f: 'R2R',V_xm: $real,V_ym: $real] :
      ( ( 'func-minimal/3' @ V_f @ V_xm @ V_ym )
    <=> ( ( 0.0
          = ( 'funapp/2' @ ( 'derivative/1' @ V_f ) @ V_xm ) )
        & ? [V_e: $real] :
            ( ( $less @ 0.0 @ V_e )
            & ( 'func-min/4' @ V_f @ ( 'range/2' @ ( 'ep-open/1' @ ( $difference @ V_xm @ V_e ) ) @ ( 'ep-open/1' @ ( $sum @ V_xm @ V_e ) ) ) @ V_xm @ V_ym ) ) ) ) )).

thf('.def_func_extreme_axiom',axiom,(
    ! [V_f: 'R2R',V_xm: $real,V_ym: $real] :
      ( ( 'func-extreme/3' @ V_f @ V_xm @ V_ym )
    <=> ( ( 0.0
          = ( 'funapp/2' @ ( 'derivative/1' @ V_f ) @ V_xm ) )
        & ? [V_e: $real] :
            ( ( $less @ 0.0 @ V_e )
            & ( ( 'func-min/4' @ V_f @ ( 'range/2' @ ( 'ep-open/1' @ ( $difference @ V_xm @ V_e ) ) @ ( 'ep-open/1' @ ( $sum @ V_xm @ V_e ) ) ) @ V_xm @ V_ym )
              | ( 'func-max/4' @ V_f @ ( 'range/2' @ ( 'ep-open/1' @ ( $difference @ V_xm @ V_e ) ) @ ( 'ep-open/1' @ ( $sum @ V_xm @ V_e ) ) ) @ V_xm @ V_ym ) ) ) ) ) )).

thf('.def_func_even_axiom',axiom,(
    ! [V_f: ( $real > $real )] :
      ( ( 'func-even/1' @ ( 'fun/1' @ V_f ) )
    <=> ! [V_x: $real] :
          ( ( V_f @ V_x )
          = ( V_f @ ( $uminus @ V_x ) ) ) ) )).

thf('.def_func_odd_axiom',axiom,(
    ! [V_f: ( $real > $real )] :
      ( ( 'func-odd/1' @ ( 'fun/1' @ V_f ) )
    <=> ! [V_x: $real] :
          ( ( $uminus @ ( V_f @ V_x ) )
          = ( V_f @ ( $uminus @ V_x ) ) ) ) )).

thf('.def-ratio-equality_axiom',axiom,(
    ! [V_r1: ( 'ListOf' @ $real ),V_r2: ( 'ListOf' @ $real )] :
      ( ( ( 'ratio/1' @ V_r1 )
        = ( 'ratio/1' @ V_r2 ) )
    <=> ? [V_k: $real] :
          ( ( V_k != 0.0 )
          & ( V_r1
            = ( 'map/2' @ $real @ $real
              @ ^ [V_x: $real] :
                  ( $product @ V_k @ V_x )
              @ V_r2 ) ) ) ) )).

thf('.def-func-arctan_axiom',axiom,(
    ! [V_x: $real,V_s: $real] :
      ( ( V_s
        = ( 'arctan/1' @ V_x ) )
    <=> ( ( $less @ ( $uminus @ ( $quotient @ 'Pi/0' @ 2.0 ) ) @ V_s )
        & ( $less @ V_s @ ( $quotient @ 'Pi/0' @ 2.0 ) )
        & ( ( $quotient @ ( 'sin/1' @ V_s ) @ ( 'cos/1' @ V_s ) )
          = V_x ) ) ) )).

thf('int.def_is_integer_axiom',axiom,(
    ! [V_n: $int] :
      ( $is_int @ V_n ) )).

thf('int.is-natural-number_axiom',axiom,(
    ! [V_n: $int] :
      ( ( 'int.is-natural-number/1' @ V_n )
    <=> ( ( $is_int @ V_n )
        & ( $lesseq @ 1 @ V_n ) ) ) )).

thf('int.is-lattice-point_axiom',axiom,(
    ! [V_ps: ( 'ListOf' @ $int )] :
      ( ( 'int.is-lattice-point/1' @ V_ps )
    <=> ? [V_b: $int,V_a: $int] :
          ( ( V_ps
            = ( 'cons/2' @ $int @ V_a @ ( 'cons/2' @ $int @ V_b @ ( 'nil/0' @ $int ) ) ) )
          & ( $is_int @ V_a )
          & ( $is_int @ V_b ) ) ) )).

thf('int.def-int-binary-min_axiom',axiom,(
    ! [V_x: $int,V_y: $int] :
      ( ( 'int.min/2' @ V_x @ V_y )
      = ( 'if/3' @ $int
        @ ^ [V__: 'Unit'] :
            ( $less @ V_x @ V_y )
        @ V_x
        @ V_y ) ) )).

thf('int.def-int-binary-max_axiom',axiom,(
    ! [V_x: $int,V_y: $int] :
      ( ( 'int.max/2' @ V_x @ V_y )
      = ( 'if/3' @ $int
        @ ^ [V__: 'Unit'] :
            ( $less @ V_x @ V_y )
        @ V_y
        @ V_x ) ) )).

thf('int.def_zmaximum_axiom',axiom,(
    ! [V_set: ( 'SetOf' @ $int ),V_max: $int] :
      ( ( 'int.maximum/2' @ V_set @ V_max )
    <=> ( ( 'elem/2' @ $int @ V_max @ V_set )
        & ! [V_v: $int] :
            ( ( 'elem/2' @ $int @ V_v @ V_set )
           => ( $lesseq @ V_v @ V_max ) ) ) ) )).

thf('int.def_zminimum_axiom',axiom,(
    ! [V_set: ( 'SetOf' @ $int ),V_min: $int] :
      ( ( 'int.minimum/2' @ V_set @ V_min )
    <=> ( ( 'elem/2' @ $int @ V_min @ V_set )
        & ! [V_v: $int] :
            ( ( 'elem/2' @ $int @ V_v @ V_set )
           => ( $lesseq @ V_min @ V_v ) ) ) ) )).

thf('int.def_int_sum_nil_axiom',axiom,
    ( ( 'int.sum/1' @ ( 'nil/0' @ $int ) )
    = 0 )).

thf('int.def_int_sum_cons_axiom',axiom,(
    ! [V_x: $int,V_xs: ( 'ListOf' @ $int )] :
      ( ( 'int.sum/1' @ ( 'cons/2' @ $int @ V_x @ V_xs ) )
      = ( $sum @ V_x @ ( 'int.sum/1' @ V_xs ) ) ) )).

thf('int.def_int_product_nil_axiom',axiom,
    ( ( 'int.product/1' @ ( 'nil/0' @ $int ) )
    = 1 )).

thf('int.def_int_product_cons_axiom',axiom,(
    ! [V_x: $int,V_xs: ( 'ListOf' @ $int )] :
      ( ( 'int.product/1' @ ( 'cons/2' @ $int @ V_x @ V_xs ) )
      = ( $product @ V_x @ ( 'int.product/1' @ V_xs ) ) ) )).

thf('int.def-is-common-divisor-of_axiom',axiom,(
    ! [V_m: $int,V_ns: ( 'ListOf' @ $int )] :
      ( ( 'int.is-common-divisor-of/2' @ V_m @ V_ns )
    <=> ( 'all/2' @ $int
        @ ^ [V_n: $int] :
            ( 'int.is-divisible-by/2' @ V_n @ V_m )
        @ V_ns ) ) )).

thf('int.def-is-common-multiple-of_axiom',axiom,(
    ! [V_m: $int,V_ns: ( 'ListOf' @ $int )] :
      ( ( 'int.is-common-multiple-of/2' @ V_m @ V_ns )
    <=> ( 'all/2' @ $int
        @ ^ [V_n: $int] :
            ( 'int.is-divisible-by/2' @ V_m @ V_n )
        @ V_ns ) ) )).

thf('int.def-lcm2_axiom',axiom,(
    ! [V_m: $int,V_n: $int] :
      ( ( 'int.lcm/2' @ V_m @ V_n )
      = ( 'int.lcm/1' @ ( 'cons/2' @ $int @ V_m @ ( 'cons/2' @ $int @ V_n @ ( 'nil/0' @ $int ) ) ) ) ) )).

thf('int.def-is-odd-number_axiom',axiom,(
    ! [V_n: $int] :
      ( ( 'int.is-odd-number/1' @ V_n )
    <=> ? [V_k: $int] :
          ( V_n
          = ( $sum @ ( $product @ 2 @ V_k ) @ 1 ) ) ) )).

thf('int.def-is-even-number_axiom',axiom,(
    ! [V_n: $int] :
      ( ( 'int.is-even-number/1' @ V_n )
    <=> ( 'int.is-divisible-by/2' @ V_n @ 2 ) ) )).

thf('int.def-are-coprime_axiom',axiom,(
    ! [V_ns: ( 'ListOf' @ $int )] :
      ( ( 'int.are-coprime/1' @ V_ns )
    <=> ( 1
        = ( 'int.gcd/1' @ V_ns ) ) ) )).

thf('int.def-are-coprime-2int_axiom',axiom,(
    ! [V_a: $int,V_b: $int] :
      ( ( 'int.are-coprime/2' @ V_a @ V_b )
    <=> ( 1
        = ( 'int.gcd/2' @ V_a @ V_b ) ) ) )).

thf('int.def-is-divisible-by_axiom',axiom,(
    ! [V_m: $int,V_n: $int] :
      ( ( 'int.is-divisible-by/2' @ V_m @ V_n )
    <=> ? [V_k: $int] :
          ( V_m
          = ( $product @ V_k @ V_n ) ) ) )).

thf('int.def-is-prime_axiom',axiom,(
    ! [V_p: $int] :
      ( ( 'int.is-prime/1' @ V_p )
    <=> ( ( $lesseq @ 2 @ V_p )
        & ! [V_m: $int,V_n: $int] :
            ( ( ( V_p
                = ( $product @ V_m @ V_n ) )
              & ( $less @ 0 @ V_m )
              & ( $less @ 0 @ V_n ) )
           => ( ( V_m = V_p )
              | ( V_n = V_p ) ) ) ) ) )).

thf('int.def-is-square-number_axiom',axiom,(
    ! [V_n: $int] :
      ( ( 'int.is-square-number/1' @ V_n )
    <=> ? [V_m: $int] :
          ( V_n
          = ( $product @ V_m @ V_m ) ) ) )).

thf('int.def_is_cardinality_of_int_axiom',axiom,(
    ! [V_n: $int,V_s: ( 'SetOf' @ $int )] :
      ( ( 'int.is-cardinality-of/2' @ V_n @ V_s )
    <=> ( V_n
        = ( 'list-len/1' @ $int @ ( 'int.set-to-list/1' @ V_s ) ) ) ) )).

thf('int.def_cardinality_of_int_axiom',axiom,(
    ! [V_s: ( 'SetOf' @ $int )] :
      ( ( 'int.cardinality-of/1' @ V_s )
      = ( 'list-len/1' @ $int @ ( 'int.set-to-list/1' @ V_s ) ) ) )).

thf('int.def_list_len_0_axiom',axiom,(
    ! [Tv9: $tType,V_xs: ( 'ListOf' @ Tv9 )] :
      ( ( ( 'list-len/1' @ Tv9 @ V_xs )
        = 0 )
    <=> ( V_xs
        = ( 'nil/0' @ Tv9 ) ) ) )).

thf('int.def_list_len_1_axiom',axiom,(
    ! [Tv12: $tType,V_xs: ( 'ListOf' @ Tv12 )] :
      ( ( ( 'list-len/1' @ Tv12 @ V_xs )
        = 1 )
    <=> ? [V_x: Tv12] :
          ( V_xs
          = ( 'cons/2' @ Tv12 @ V_x @ ( 'nil/0' @ Tv12 ) ) ) ) )).

thf('int.def_list_len_2_axiom',axiom,(
    ! [Tv15: $tType,V_xs: ( 'ListOf' @ Tv15 )] :
      ( ( ( 'list-len/1' @ Tv15 @ V_xs )
        = 2 )
    <=> ? [V_x1: Tv15,V_x2: Tv15] :
          ( V_xs
          = ( 'cons/2' @ Tv15 @ V_x1 @ ( 'cons/2' @ Tv15 @ V_x2 @ ( 'nil/0' @ Tv15 ) ) ) ) ) )).

thf('int.def_list_len_3_axiom',axiom,(
    ! [Tv18: $tType,V_xs: ( 'ListOf' @ Tv18 )] :
      ( ( ( 'list-len/1' @ Tv18 @ V_xs )
        = 3 )
    <=> ? [V_x1: Tv18,V_x2: Tv18,V_x3: Tv18] :
          ( V_xs
          = ( 'cons/2' @ Tv18 @ V_x1 @ ( 'cons/2' @ Tv18 @ V_x2 @ ( 'cons/2' @ Tv18 @ V_x3 @ ( 'nil/0' @ Tv18 ) ) ) ) ) ) )).

thf('int.def_list_len_base_axiom',axiom,(
    ! [Tv6: $tType] :
      ( ( 'list-len/1' @ Tv6 @ ( 'nil/0' @ Tv6 ) )
      = 0 ) )).

thf('int.def_list_len_rec_axiom',axiom,(
    ! [Tv11: $tType,V_x: Tv11,V_xs: ( 'ListOf' @ Tv11 )] :
      ( ( 'list-len/1' @ Tv11 @ ( 'cons/2' @ Tv11 @ V_x @ V_xs ) )
      = ( $sum @ 1 @ ( 'list-len/1' @ Tv11 @ V_xs ) ) ) )).

thf('int.def_replicate_0_axiom',axiom,(
    ! [Tv7: $tType,V_x: Tv7] :
      ( ( 'replicate/2' @ Tv7 @ 0 @ V_x )
      = ( 'nil/0' @ Tv7 ) ) )).

thf('int.def_replicate_n_axiom',axiom,(
    ! [Tv11: $tType,V_n: $int,V_x: Tv11] :
      ( ( 'replicate/2' @ Tv11 @ V_n @ V_x )
      = ( 'cons/2' @ Tv11 @ V_x @ ( 'replicate/2' @ Tv11 @ ( $difference @ V_n @ 1 ) @ V_x ) ) ) )).

thf('int.def_nthcdr_0_axiom',axiom,(
    ! [Tv5: $tType,V_lis: ( 'ListOf' @ Tv5 )] :
      ( ( 'nthcdr/2' @ Tv5 @ 0 @ V_lis )
      = V_lis ) )).

thf('int.def_nthcdr_rec_axiom',axiom,(
    ! [Tv11: $tType,V_n: $int,V_lis: ( 'ListOf' @ Tv11 )] :
      ( ( 'nthcdr/2' @ Tv11 @ V_n @ V_lis )
      = ( 'cdr/1' @ Tv11 @ ( 'nthcdr/2' @ Tv11 @ ( $difference @ V_n @ 1 ) @ V_lis ) ) ) )).

thf('int.def_nth_axiom',axiom,(
    ! [Tv9: $tType,V_n: $int,V_lis: ( 'ListOf' @ Tv9 )] :
      ( ( 'nth/2' @ Tv9 @ V_n @ V_lis )
      = ( 'car/1' @ Tv9 @ ( 'nthcdr/2' @ Tv9 @ V_n @ V_lis ) ) ) )).

thf('int.def_list_number_0_axiom',axiom,(
    ! [Tv7: $tType,V_x: Tv7] :
      ( ( 'list-number/2' @ Tv7 @ V_x @ ( 'nil/0' @ Tv7 ) )
      = 0 ) )).

thf('int.def_list_number_rec_axiom',axiom,(
    ! [Tv19: $tType,V_x: Tv19,V_y: Tv19,V_lis: ( 'ListOf' @ Tv19 )] :
      ( ( 'list-number/2' @ Tv19 @ V_x @ ( 'cons/2' @ Tv19 @ V_y @ V_lis ) )
      = ( 'if/3' @ $int
        @ ^ [V__: 'Unit'] : ( V_x = V_y )
        @ ( $sum @ 1 @ ( 'list-number/2' @ Tv19 @ V_x @ V_lis ) )
        @ ( 'list-number/2' @ Tv19 @ V_x @ V_lis ) ) ) )).

thf('int.int2binary_0_axiom',axiom,
    ( ( 'int.int2binary/1' @ 0 )
    = ( 'cons/2' @ $int @ 0 @ ( 'nil/0' @ $int ) ) )).

thf('int.int2binary_1_axiom',axiom,
    ( ( 'int.int2binary/1' @ 1 )
    = ( 'cons/2' @ $int @ 1 @ ( 'nil/0' @ $int ) ) )).

thf('int.int2binary_n_axiom',axiom,(
    ! [V_n: $int] :
      ( ( 'int.int2binary/1' @ V_n )
      = ( 'cons/2' @ $int @ ( $remainder_f @ V_n @ 2 ) @ ( 'int.int2binary/1' @ ( $quotient_f @ V_n @ 2 ) ) ) ) )).

thf('int.int2decimal_0_axiom',axiom,
    ( ( 'int.int2decimal/1' @ 0 )
    = ( 'cons/2' @ $int @ 0 @ ( 'nil/0' @ $int ) ) )).

thf('int.int2decimal_1_axiom',axiom,
    ( ( 'int.int2decimal/1' @ 1 )
    = ( 'cons/2' @ $int @ 1 @ ( 'nil/0' @ $int ) ) )).

thf('int.int2decimal_2_axiom',axiom,
    ( ( 'int.int2decimal/1' @ 2 )
    = ( 'cons/2' @ $int @ 2 @ ( 'nil/0' @ $int ) ) )).

thf('int.int2decimal_3_axiom',axiom,
    ( ( 'int.int2decimal/1' @ 3 )
    = ( 'cons/2' @ $int @ 3 @ ( 'nil/0' @ $int ) ) )).

thf('int.int2decimal_4_axiom',axiom,
    ( ( 'int.int2decimal/1' @ 4 )
    = ( 'cons/2' @ $int @ 4 @ ( 'nil/0' @ $int ) ) )).

thf('int.int2decimal_5_axiom',axiom,
    ( ( 'int.int2decimal/1' @ 5 )
    = ( 'cons/2' @ $int @ 5 @ ( 'nil/0' @ $int ) ) )).

thf('int.int2decimal_6_axiom',axiom,
    ( ( 'int.int2decimal/1' @ 6 )
    = ( 'cons/2' @ $int @ 6 @ ( 'nil/0' @ $int ) ) )).

thf('int.int2decimal_7_axiom',axiom,
    ( ( 'int.int2decimal/1' @ 7 )
    = ( 'cons/2' @ $int @ 7 @ ( 'nil/0' @ $int ) ) )).

thf('int.int2decimal_8_axiom',axiom,
    ( ( 'int.int2decimal/1' @ 8 )
    = ( 'cons/2' @ $int @ 8 @ ( 'nil/0' @ $int ) ) )).

thf('int.int2decimal_9_axiom',axiom,
    ( ( 'int.int2decimal/1' @ 9 )
    = ( 'cons/2' @ $int @ 9 @ ( 'nil/0' @ $int ) ) )).

thf('int.int2decimal_n_axiom',axiom,(
    ! [V_n: $int] :
      ( ( 'int.int2decimal/1' @ V_n )
      = ( 'cons/2' @ $int @ ( $remainder_f @ V_n @ 10 ) @ ( 'int.int2decimal/1' @ ( $quotient_f @ V_n @ 10 ) ) ) ) )).

thf('int.ordinal_0_axiom',axiom,
    ( ( 'int.ordinal/1' @ 0 )
    = ( 'nil/0' @ $int ) )).

thf('int.ordinal_n_axiom',axiom,(
    ! [V_n: $int] :
      ( ( 'int.ordinal/1' @ V_n )
      = ( 'append/2' @ $int @ ( 'int.ordinal/1' @ ( $difference @ V_n @ 1 ) ) @ ( 'cons/2' @ $int @ ( $difference @ V_n @ 1 ) @ ( 'nil/0' @ $int ) ) ) ) )).

thf('int.repeat_0_axiom',axiom,(
    ! [Tv6: $tType,V_f: ( Tv6 > Tv6 ),V_x: Tv6] :
      ( ( 'repeat/3' @ Tv6 @ 0 @ V_f @ V_x )
      = V_x ) )).

thf('int.repeat_rec_axiom',axiom,(
    ! [Tv13: $tType,V_n: $int,V_f: ( Tv13 > Tv13 ),V_x: Tv13] :
      ( ( 'repeat/3' @ Tv13 @ V_n @ V_f @ V_x )
      = ( V_f @ ( 'repeat/3' @ Tv13 @ ( $difference @ V_n @ 1 ) @ V_f @ V_x ) ) ) )).

thf('int.repeat_p_0_axiom',axiom,(
    ! [Tv6: $tType,V_f: ( Tv6 > $int > Tv6 ),V_x: Tv6] :
      ( ( 'repeat-p/3' @ Tv6 @ 0 @ V_f @ V_x )
      = V_x ) )).

thf('int.repeat_p_rec_axiom',axiom,(
    ! [Tv18: $tType,V_n: $int,V_f: ( Tv18 > $int > Tv18 ),V_x: Tv18] :
      ( ( 'repeat-p/3' @ Tv18 @ V_n @ V_f @ V_x )
      = ( V_f @ ( 'repeat-p/3' @ Tv18 @ ( $difference @ V_n @ 1 ) @ V_f @ V_x ) @ ( $difference @ V_n @ 1 ) ) ) )).

thf('int.def_factorial_base_0_axiom',axiom,
    ( ( 'int.factorial/1' @ 0 )
    = 1 )).

thf('int.def_factorial_base_1_axiom',axiom,
    ( ( 'int.factorial/1' @ 1 )
    = 1 )).

thf('int.def_factorial_rec_axiom',axiom,(
    ! [V_n: $int] :
      ( ( 'int.factorial/1' @ V_n )
      = ( $product @ V_n @ ( 'int.factorial/1' @ ( $difference @ V_n @ 1 ) ) ) ) )).

thf('int.def_permutation_base_axiom',axiom,(
    ! [V_n: $int] :
      ( ( 'int.permutation/2' @ V_n @ 0 )
      = 1 ) )).

thf('int.def_permutation_rec_axiom',axiom,(
    ! [V_n: $int,V_m: $int] :
      ( ( 'int.permutation/2' @ V_n @ V_m )
      = ( $product @ V_n @ ( 'int.permutation/2' @ ( $difference @ V_n @ 1 ) @ ( $difference @ V_m @ 1 ) ) ) ) )).

thf('int.def_combination_axiom',axiom,(
    ! [V_n: $int,V_m: $int] :
      ( ( 'int.combination/2' @ V_n @ V_m )
      = ( $quotient_f @ ( 'int.permutation/2' @ V_n @ V_m ) @ ( 'int.factorial/1' @ V_m ) ) ) )).

thf('int.def-lattice-xcoord_axiom',axiom,(
    ! [V_x: $int,V_y: $int] :
      ( ( 'int.x-coord/1' @ ( 'cons/2' @ $int @ V_x @ ( 'cons/2' @ $int @ V_y @ ( 'nil/0' @ $int ) ) ) )
      = V_x ) )).

thf('int.def-lattice-ycoord_axiom',axiom,(
    ! [V_x: $int,V_y: $int] :
      ( ( 'int.y-coord/1' @ ( 'cons/2' @ $int @ V_x @ ( 'cons/2' @ $int @ V_y @ ( 'nil/0' @ $int ) ) ) )
      = V_y ) )).

thf('int.def-num-of-digits-eq_axiom',axiom,(
    ! [V_n: $int,V_m: $int] :
      ( ( ( 'int.num-of-digits/1' @ V_n )
        = V_m )
    <=> ( ( $lesseq @ ( 'int.^/2' @ 10 @ ( $difference @ V_m @ 1 ) ) @ V_n )
        & ( $less @ V_n @ ( 'int.^/2' @ 10 @ V_m ) ) ) ) )).

thf('int.def-num-of-digits-lt1_axiom',axiom,(
    ! [V_n: $int,V_m: $int] :
      ( ( $less @ ( 'int.num-of-digits/1' @ V_n ) @ V_m )
    <=> ( $less @ V_n @ ( 'int.^/2' @ 10 @ ( $difference @ V_m @ 1 ) ) ) ) )).

thf('int.def-num-of-digits-lt2_axiom',axiom,(
    ! [V_n: $int,V_m: $int] :
      ( ( $less @ V_m @ ( 'int.num-of-digits/1' @ V_n ) )
    <=> ( $lesseq @ ( 'int.^/2' @ 10 @ V_m ) @ V_n ) ) )).

thf('int.def-num-of-digits-gt1_axiom',axiom,(
    ! [V_n: $int,V_m: $int] :
      ( ( $greater @ ( 'int.num-of-digits/1' @ V_n ) @ V_m )
    <=> ( $lesseq @ ( 'int.^/2' @ 10 @ V_m ) @ V_n ) ) )).

thf('int.def-num-of-digits-gt2_axiom',axiom,(
    ! [V_n: $int,V_m: $int] :
      ( ( $greater @ V_m @ ( 'int.num-of-digits/1' @ V_n ) )
    <=> ( $less @ V_n @ ( 'int.^/2' @ 10 @ ( $difference @ V_m @ 1 ) ) ) ) )).

thf('int.def-num-of-digits-le1_axiom',axiom,(
    ! [V_n: $int,V_m: $int] :
      ( ( $lesseq @ ( 'int.num-of-digits/1' @ V_n ) @ V_m )
    <=> ( $less @ V_n @ ( 'int.^/2' @ 10 @ V_m ) ) ) )).

thf('int.def-num-of-digits-le2_axiom',axiom,(
    ! [V_n: $int,V_m: $int] :
      ( ( $lesseq @ V_m @ ( 'int.num-of-digits/1' @ V_n ) )
    <=> ( $lesseq @ ( 'int.^/2' @ 10 @ ( $difference @ V_m @ 1 ) ) @ V_n ) ) )).

thf('int.def-num-of-digits-ge1_axiom',axiom,(
    ! [V_n: $int,V_m: $int] :
      ( ( $greatereq @ ( 'int.num-of-digits/1' @ V_n ) @ V_m )
    <=> ( $lesseq @ ( 'int.^/2' @ 10 @ ( $difference @ V_m @ 1 ) ) @ V_n ) ) )).

thf('int.def-num-of-digits-ge2_axiom',axiom,(
    ! [V_n: $int,V_m: $int] :
      ( ( $greatereq @ V_m @ ( 'int.num-of-digits/1' @ V_n ) )
    <=> ( $less @ V_n @ ( 'int.^/2' @ 10 @ V_m ) ) ) )).

thf('int.def-mod-eq_axiom',axiom,(
    ! [V_n: $int,V_m: $int,V_k: $int] :
      ( ( ( $remainder_f @ V_n @ V_m )
        = V_k )
    <=> ( ( $lesseq @ 0 @ V_k )
        & ( $less @ V_k @ ( 'int.abs/1' @ V_m ) )
        & ? [V_p: $int] :
            ( V_n
            = ( $sum @ ( $product @ V_m @ V_p ) @ V_k ) ) ) ) )).

%------------------------------------------------------------------------------
%----finiteness of a set of integers
%------------------------------------------------------------------------------
thf('int.def-is-finite-set_axiom',axiom,(
    ! [V_s: ( 'SetOf' @ $int )] :
      ( ( 'int.is-finite-set/1' @ V_s )
    <=> ? [V_m: $int,V_M: $int] :
        ! [V_e: $int] :
          ( ( 'elem/2' @ $int @ V_e @ V_s )
         => ( ( $lesseq @ V_m @ V_e )
            & ( $lesseq @ V_e @ V_M ) ) ) ) )).

thf('int.def-is-infinit-set_axiom',axiom,(
    ! [V_s: ( 'SetOf' @ $int )] :
      ( ( 'int.is-infinite-set/1' @ V_s )
    <=> ~ ( 'int.is-finite-set/1' @ V_s ) ) )).

thf('rat.def_rat^_axiom',axiom,(
    ! [V_a: $int,V_b: $int,V_n: $int] :
      ( ( 'rat.^/2' @ ( $quotient @ ( $to_rat @ V_a ) @ ( $to_rat @ V_b ) ) @ V_n )
      = ( $quotient @ ( $to_rat @ ( 'int.^/2' @ V_a @ V_n ) ) @ ( $to_rat @ ( 'int.^/2' @ V_b @ V_n ) ) ) ) )).

thf('rat.def_rat_abs_axiom',axiom,(
    ! [V_a: $int,V_b: $int] :
      ( ( 'rat.abs/1' @ ( $quotient @ ( $to_rat @ V_a ) @ ( $to_rat @ V_b ) ) )
      = ( $quotient @ ( $to_rat @ ( 'int.abs/1' @ V_a ) ) @ ( $to_rat @ ( 'int.abs/1' @ V_b ) ) ) ) )).

thf('rat.def_rat_sum_nil_axiom',axiom,
    ( ( 'rat.sum/1' @ ( 'nil/0' @ $rat ) )
    = ( $to_rat @ 0 ) )).

thf('rat.def_rat_sum_cons_axiom',axiom,(
    ! [V_x: $rat,V_xs: ( 'ListOf' @ $rat )] :
      ( ( 'rat.sum/1' @ ( 'cons/2' @ $rat @ V_x @ V_xs ) )
      = ( $sum @ V_x @ ( 'rat.sum/1' @ V_xs ) ) ) )).

thf('rat.def_rat_product_nil_axiom',axiom,
    ( ( 'rat.product/1' @ ( 'nil/0' @ $rat ) )
    = ( $to_rat @ 1 ) )).

thf('rat.def_rat_product_cons_axiom',axiom,(
    ! [V_x: $rat,V_xs: ( 'ListOf' @ $rat )] :
      ( ( 'rat.product/1' @ ( 'cons/2' @ $rat @ V_x @ V_xs ) )
      = ( $product @ V_x @ ( 'rat.product/1' @ V_xs ) ) ) )).

thf('2d.circle-shape/1_type',type,(
    '2d.circle-shape/1': '2d.Shape' > '2d.Shape' )).

thf('2d.disk-shape/1_type',type,(
    '2d.disk-shape/1': '2d.Shape' > '2d.Shape' )).

thf('2d.arc-shape/1_type',type,(
    '2d.arc-shape/1': '2d.Shape' > '2d.Shape' )).

thf('2d.circular-sector-shape/1_type',type,(
    '2d.circular-sector-shape/1': '2d.Shape' > '2d.Shape' )).

thf('2d.def_is_shape_axiom',axiom,(
    ! [V_s: '2d.Shape'] :
      ( '2d.is-shape/1' @ V_s ) )).

thf('2d.def_is_point_axiom',axiom,(
    ! [V_p: '2d.Point'] :
      ( '2d.is-point/1' @ V_p ) )).

thf('2d.def_vec_perpendicular_axiom',axiom,(
    ! [V_v1: '2d.Vector',V_v2: '2d.Vector'] :
      ( ( '2d.vec-perpendicular/2' @ V_v1 @ V_v2 )
    <=> ( 0.0
        = ( '2d.inner-prod/2' @ V_v1 @ V_v2 ) ) ) )).

thf('2d.def_colinear_axiom',axiom,(
    ! [V_p0: '2d.Point',V_p1: '2d.Point',V_p2: '2d.Point'] :
      ( ( '2d.colinear/3' @ V_p0 @ V_p1 @ V_p2 )
    <=> ( '2d.vec-parallel/2' @ ( '2d.vec/2' @ V_p0 @ V_p1 ) @ ( '2d.vec/2' @ V_p0 @ V_p2 ) ) ) )).

thf('2d.def_vec_translate_axiom',axiom,(
    ! [V_P: '2d.Point',V_v: '2d.Vector'] :
      ( ( '2d.vec-translate/2' @ V_P @ V_v )
      = ( '2d.vec->point/1' @ ( '2d.v+/2' @ ( '2d.vec/2' @ '2d.origin/0' @ V_P ) @ V_v ) ) ) )).

thf('2d.def_converge_point_axiom',axiom,(
    ! [V_f: ( $int > '2d.Point' ),V_p0: '2d.Point'] :
      ( ( '2d.converge-point/2' @ V_f @ V_p0 )
    <=> ! [V_x: $real] :
        ? [V_l: $int] :
        ! [V_n: $int] :
          ( ( $less @ V_l @ V_n )
         => ( $less @ ( '2d.distance/2' @ V_p0 @ ( V_f @ V_n ) ) @ V_x ) ) ) )).

thf('2d.def_points_colinear_base_case_axiom',axiom,(
    ! [V_p0: '2d.Point',V_p1: '2d.Point'] :
      ( '2d.points-colinear/1' @ ( 'cons/2' @ '2d.Point' @ V_p0 @ ( 'cons/2' @ '2d.Point' @ V_p1 @ ( 'nil/0' @ '2d.Point' ) ) ) ) )).

thf('2d.def_points_colinear_axiom',axiom,(
    ! [V_p0: '2d.Point',V_p1: '2d.Point',V_p2: '2d.Point',V_ps: ( 'ListOf' @ '2d.Point' )] :
      ( ( '2d.points-colinear/1' @ ( 'cons/2' @ '2d.Point' @ V_p0 @ ( 'cons/2' @ '2d.Point' @ V_p1 @ ( 'cons/2' @ '2d.Point' @ V_p2 @ V_ps ) ) ) )
    <=> ( ( '2d.colinear/3' @ V_p0 @ V_p1 @ V_p2 )
        & ( '2d.points-colinear/1' @ ( 'cons/2' @ '2d.Point' @ V_p1 @ ( 'cons/2' @ '2d.Point' @ V_p2 @ V_ps ) ) ) ) ) )).

thf('2d.def_points_with_equal_interval_axiom',axiom,(
    ! [V_p0: '2d.Point',V_p1: '2d.Point',V_ps: ( 'ListOf' @ '2d.Point' )] :
      ( ( '2d.points-with-equal-interval/1' @ ( 'cons/2' @ '2d.Point' @ V_p0 @ ( 'cons/2' @ '2d.Point' @ V_p1 @ V_ps ) ) )
    <=> ( 'cyclic-all/2' @ '2d.Point'
        @ ^ [V_x: '2d.Point',V_y: '2d.Point',V_z: '2d.Point'] :
            ( ( '2d.distance^2/2' @ V_p0 @ V_p1 )
            = ( '2d.distance^2/2' @ V_x @ V_y ) )
        @ ( 'cons/2' @ '2d.Point' @ V_p0 @ ( 'cons/2' @ '2d.Point' @ V_p1 @ V_ps ) ) ) ) )).

thf('2d.def_points_bending_by_equal_angle_axiom',axiom,(
    ! [V_p0: '2d.Point',V_p1: '2d.Point',V_ps: ( 'ListOf' @ '2d.Point' )] :
      ( ( '2d.points-bending-by-equal-angle/1' @ ( 'cons/2' @ '2d.Point' @ V_p0 @ ( 'cons/2' @ '2d.Point' @ V_p1 @ V_ps ) ) )
    <=> ( 'cyclic-all/2' @ '2d.Point'
        @ ^ [V_x: '2d.Point',V_y: '2d.Point',V_z: '2d.Point'] :
            ( ( '2d.cos-of-angle/1' @ ( '2d.angle/3' @ ( 'last/1' @ '2d.Point' @ V_ps ) @ V_p0 @ V_p1 ) )
            = ( '2d.cos-of-angle/1' @ ( '2d.angle/3' @ V_x @ V_y @ V_z ) ) )
        @ ( 'cons/2' @ '2d.Point' @ V_p0 @ ( 'cons/2' @ '2d.Point' @ V_p1 @ V_ps ) ) ) ) )).

thf('2d.def_equidistant_axiom',axiom,(
    ! [V_p: '2d.Point',V_q: '2d.Point',V_r: '2d.Point'] :
      ( ( '2d.equidistant/3' @ V_p @ V_q @ V_r )
    <=> ( ( '2d.distance^2/2' @ V_p @ V_r )
        = ( '2d.distance^2/2' @ V_q @ V_r ) ) ) )).

thf('2d.def_equidistant_list_axiom',axiom,(
    ! [V_ps: ( 'ListOf' @ '2d.Point' ),V_q: '2d.Point'] :
      ( ( '2d.equidistant/2' @ V_ps @ V_q )
    <=> ( 'equal/1' @ $real
        @ ( 'map/2' @ '2d.Point' @ $real
          @ ^ [V_p: '2d.Point'] :
              ( '2d.distance^2/2' @ V_p @ V_q )
          @ V_ps ) ) ) )).

thf('2d.def_vec_same_direction_axiom',axiom,(
    ! [V_v: '2d.Vector',V_w: '2d.Vector'] :
      ( ( '2d.vec-same-direction/2' @ V_v @ V_w )
    <=> ( ( '2d.vec-parallel/2' @ V_v @ V_w )
        & ( $less @ 0.0 @ ( '2d.inner-prod/2' @ V_v @ V_w ) ) ) ) )).

thf('2d.def_vec_opp_direction_axiom',axiom,(
    ! [V_v: '2d.Vector',V_w: '2d.Vector'] :
      ( ( '2d.vec-opp-direction/2' @ V_v @ V_w )
    <=> ( ( '2d.vec-parallel/2' @ V_v @ V_w )
        & ( $greater @ 0.0 @ ( '2d.inner-prod/2' @ V_v @ V_w ) ) ) ) )).

thf('2d.def-is-vector_axiom',axiom,(
    ! [V_v: '2d.Vector'] :
      ( '2d.is-vector/1' @ V_v ) )).

thf('2d.def_is_unit_vec_axiom',axiom,(
    ! [V_v: '2d.Vector'] :
      ( ( '2d.is-unit-vec/1' @ V_v )
    <=> ( 1.0
        = ( '2d.radius^2/1' @ V_v ) ) ) )).

thf('2d.def-vec-unary-minus_axiom',axiom,(
    ! [V_v: '2d.Vector'] :
      ( ( '2d.v-/1' @ V_v )
      = ( '2d.sv*/2' @ -1.0 @ V_v ) ) )).

thf('2d.def_is_normal_vector_of_axiom',axiom,(
    ! [V_q: '2d.Point',V_p: '2d.Point',V_v: '2d.Vector'] :
      ( ( '2d.line-type/1' @ ( '2d.line/2' @ V_p @ V_q ) )
     => ( ( '2d.is-normal-vector-of/2' @ V_v @ ( '2d.line/2' @ V_p @ V_q ) )
      <=> ( 0.0
          = ( '2d.inner-prod/2' @ V_v @ ( '2d.vec/2' @ V_p @ V_q ) ) ) ) ) )).

thf('2d.def_normal_vector_to_line_axiom',axiom,(
    ! [V_point: '2d.Point',V_Q: '2d.Point',V_P: '2d.Point'] :
      ( ( '2d.line-type/1' @ ( '2d.line/2' @ V_P @ V_Q ) )
     => ( ( '2d.normal-vector-to/2' @ ( '2d.line/2' @ V_P @ V_Q ) @ V_point )
        = ( '2d.v-/2' @ ( '2d.vec/2' @ V_P @ V_point ) @ ( '2d.sv*/2' @ ( $quotient @ ( '2d.inner-prod/2' @ ( '2d.vec/2' @ V_P @ V_point ) @ ( '2d.vec/2' @ V_P @ V_Q ) ) @ ( '2d.radius^2/1' @ ( '2d.vec/2' @ V_P @ V_Q ) ) ) @ ( '2d.vec/2' @ V_P @ V_Q ) ) ) ) ) )).

thf('2d.def_direction_vec_axiom',axiom,(
    ! [V_q: '2d.Point',V_p: '2d.Point'] :
      ( ( '2d.line-type/1' @ ( '2d.line/2' @ V_p @ V_q ) )
     => ( ( '2d.direction-vec/1' @ ( '2d.line/2' @ V_p @ V_q ) )
        = ( '2d.vec/2' @ V_p @ V_q ) ) ) )).

thf('2d.def_radius_vector_axiom',axiom,(
    ! [V_v: '2d.Vector'] :
      ( ( '2d.radius/1' @ V_v )
      = ( 'sqrt/1' @ ( '2d.inner-prod/2' @ V_v @ V_v ) ) ) )).

thf('2d.def_square_radius_vector_axiom',axiom,(
    ! [V_v: '2d.Vector'] :
      ( ( '2d.radius^2/1' @ V_v )
      = ( '2d.inner-prod/2' @ V_v @ V_v ) ) )).

thf('2d.def_normalize_axiom',axiom,(
    ! [V_v: '2d.Vector'] :
      ( ( '2d.normalize/1' @ V_v )
      = ( '2d.sv*/2' @ ( $quotient @ 1.0 @ ( '2d.radius/1' @ V_v ) ) @ V_v ) ) )).

thf('2d.def-v-sum-nil_axiom',axiom,
    ( ( '2d.v-sum/1' @ ( 'nil/0' @ '2d.Vector' ) )
    = '2d.zero-vector/0' )).

thf('2d.def-v-sum-cons_axiom',axiom,(
    ! [V_v: '2d.Vector',V_vs: ( 'ListOf' @ '2d.Vector' )] :
      ( ( '2d.v-sum/1' @ ( 'cons/2' @ '2d.Vector' @ V_v @ V_vs ) )
      = ( '2d.v+/2' @ V_v @ ( '2d.v-sum/1' @ V_vs ) ) ) )).

thf('2d.def_cos_of_angle_axiom',axiom,(
    ! [V_c: '2d.Point',V_b: '2d.Point',V_a: '2d.Point'] :
      ( ( '2d.angle-type/1' @ ( '2d.angle/3' @ V_a @ V_b @ V_c ) )
     => ( ( '2d.cos-of-angle/1' @ ( '2d.angle/3' @ V_a @ V_b @ V_c ) )
        = ( $quotient @ ( '2d.inner-prod/2' @ ( '2d.vec/2' @ V_b @ V_a ) @ ( '2d.vec/2' @ V_b @ V_c ) ) @ ( $product @ ( '2d.distance/2' @ V_b @ V_a ) @ ( '2d.distance/2' @ V_b @ V_c ) ) ) ) ) )).

thf('2d.def_sin_of_angle_axiom',axiom,(
    ! [V_a: '2d.Angle'] :
      ( ( '2d.sin-of-angle/1' @ V_a )
      = ( 'sqrt/1' @ ( $difference @ 1.0 @ ( '^/2' @ ( '2d.cos-of-angle/1' @ V_a ) @ 2.0 ) ) ) ) )).

thf('2d.def_tan_of_angle_axiom',axiom,(
    ! [V_c: '2d.Point',V_b: '2d.Point',V_a: '2d.Point'] :
      ( ( '2d.angle-type/1' @ ( '2d.angle/3' @ V_a @ V_b @ V_c ) )
     => ( ( '2d.tan-of-angle/1' @ ( '2d.angle/3' @ V_a @ V_b @ V_c ) )
        = ( $quotient @ ( 'abs/1' @ ( $sum @ ( $difference @ ( $product @ ( '2d.x-coord/1' @ V_a ) @ ( '2d.y-coord/1' @ V_b ) ) @ ( $product @ ( '2d.y-coord/1' @ V_a ) @ ( '2d.x-coord/1' @ V_b ) ) ) @ ( $sum @ ( $difference @ ( $product @ ( '2d.x-coord/1' @ V_b ) @ ( '2d.y-coord/1' @ V_c ) ) @ ( $product @ ( '2d.y-coord/1' @ V_b ) @ ( '2d.x-coord/1' @ V_c ) ) ) @ ( $difference @ ( $product @ ( '2d.x-coord/1' @ V_c ) @ ( '2d.y-coord/1' @ V_a ) ) @ ( $product @ ( '2d.y-coord/1' @ V_c ) @ ( '2d.x-coord/1' @ V_a ) ) ) ) ) ) @ ( '2d.inner-prod/2' @ ( '2d.vec/2' @ V_b @ V_a ) @ ( '2d.vec/2' @ V_b @ V_c ) ) ) ) ) )).

thf('2d.def_cos_of_angle_lines_axiom',axiom,(
    ! [V_q: '2d.Point',V_p: '2d.Point',V_b: '2d.Point',V_a: '2d.Point'] :
      ( ( ( '2d.line-type/1' @ ( '2d.line/2' @ V_a @ V_b ) )
        & ( '2d.line-type/1' @ ( '2d.line/2' @ V_p @ V_q ) ) )
     => ( ( '2d.cos-of-angle/1' @ ( '2d.formed-angle-of/2' @ ( '2d.line/2' @ V_a @ V_b ) @ ( '2d.line/2' @ V_p @ V_q ) ) )
        = ( 'max/2' @ ( '2d.cos-of-angle/1' @ ( '2d.angle-of-vectors/2' @ ( '2d.vec/2' @ V_a @ V_b ) @ ( '2d.vec/2' @ V_p @ V_q ) ) ) @ ( '2d.cos-of-angle/1' @ ( '2d.angle-of-vectors/2' @ ( '2d.vec/2' @ V_b @ V_a ) @ ( '2d.vec/2' @ V_p @ V_q ) ) ) ) ) ) )).

thf('2d.def_cos_of_angle_half_lines_axiom',axiom,(
    ! [V_q: '2d.Point',V_p: '2d.Point',V_b: '2d.Point',V_a: '2d.Point'] :
      ( ( ( '2d.half-line-type/1' @ ( '2d.half-line/2' @ V_a @ V_b ) )
        & ( '2d.half-line-type/1' @ ( '2d.half-line/2' @ V_p @ V_q ) ) )
     => ( ( '2d.cos-of-angle/1' @ ( '2d.formed-angle-of/2' @ ( '2d.half-line/2' @ V_a @ V_b ) @ ( '2d.half-line/2' @ V_p @ V_q ) ) )
        = ( '2d.cos-of-angle/1' @ ( '2d.angle-of-vectors/2' @ ( '2d.vec/2' @ V_a @ V_b ) @ ( '2d.vec/2' @ V_p @ V_q ) ) ) ) ) )).

thf('2d.def_cos_1/2_angle_axiom',axiom,(
    ! [V_A: '2d.Angle'] :
      ( ( 'cos/1' @ ( $product @ ( $quotient @ 1.0 @ 2.0 ) @ ( '2d.rad-of-angle/1' @ V_A ) ) )
      = ( 'sqrt/1' @ ( $quotient @ ( $sum @ 1.0 @ ( '2d.cos-of-angle/1' @ V_A ) ) @ 2.0 ) ) ) )).

thf('2d.def_cos_1/2_angle2_axiom',axiom,(
    ! [V_A: '2d.Angle'] :
      ( ( 'cos/1' @ ( $product @ ( $quotient @ ( $to_real @ 1 ) @ ( $to_real @ 2 ) ) @ ( '2d.rad-of-angle/1' @ V_A ) ) )
      = ( 'sqrt/1' @ ( $quotient @ ( $sum @ 1.0 @ ( '2d.cos-of-angle/1' @ V_A ) ) @ 2.0 ) ) ) )).

thf('2d.def_sin_1/2_angle_axiom',axiom,(
    ! [V_A: '2d.Angle'] :
      ( ( 'sin/1' @ ( $product @ ( $quotient @ 1.0 @ 2.0 ) @ ( '2d.rad-of-angle/1' @ V_A ) ) )
      = ( 'sqrt/1' @ ( $quotient @ ( $difference @ 1.0 @ ( '2d.cos-of-angle/1' @ V_A ) ) @ 2.0 ) ) ) )).

thf('2d.def_sin_1/2_angle2_axiom',axiom,(
    ! [V_A: '2d.Angle'] :
      ( ( 'sin/1' @ ( $product @ ( $quotient @ ( $to_real @ 1 ) @ ( $to_real @ 2 ) ) @ ( '2d.rad-of-angle/1' @ V_A ) ) )
      = ( 'sqrt/1' @ ( $quotient @ ( $difference @ 1.0 @ ( '2d.cos-of-angle/1' @ V_A ) ) @ 2.0 ) ) ) )).

thf('2d.def_tan_1/2_angle_axiom',axiom,(
    ! [V_A: '2d.Angle'] :
      ( ( 'tan/1' @ ( $product @ ( $quotient @ 1.0 @ 2.0 ) @ ( '2d.rad-of-angle/1' @ V_A ) ) )
      = ( 'sqrt/1' @ ( $quotient @ ( $difference @ 1.0 @ ( '2d.cos-of-angle/1' @ V_A ) ) @ ( $sum @ 1.0 @ ( '2d.cos-of-angle/1' @ V_A ) ) ) ) ) )).

thf('2d.def_tan_1/2_angle2_axiom',axiom,(
    ! [V_A: '2d.Angle'] :
      ( ( 'tan/1' @ ( $product @ ( $quotient @ ( $to_real @ 1 ) @ ( $to_real @ 2 ) ) @ ( '2d.rad-of-angle/1' @ V_A ) ) )
      = ( 'sqrt/1' @ ( $quotient @ ( $difference @ 1.0 @ ( '2d.cos-of-angle/1' @ V_A ) ) @ ( $sum @ 1.0 @ ( '2d.cos-of-angle/1' @ V_A ) ) ) ) ) )).

thf('2d.def_cos_2*angle_axiom',axiom,(
    ! [V_A: '2d.Angle'] :
      ( ( 'cos/1' @ ( $product @ 2.0 @ ( '2d.rad-of-angle/1' @ V_A ) ) )
      = ( $difference @ ( '^/2' @ ( 'cos/1' @ ( '2d.rad-of-angle/1' @ V_A ) ) @ 2.0 ) @ ( '^/2' @ ( 'sin/1' @ ( '2d.rad-of-angle/1' @ V_A ) ) @ 2.0 ) ) ) )).

thf('2d.def_cos_2*angle2_axiom',axiom,(
    ! [V_A: '2d.Angle'] :
      ( ( 'cos/1' @ ( $product @ ( $to_real @ 2 ) @ ( '2d.rad-of-angle/1' @ V_A ) ) )
      = ( $difference @ ( '^/2' @ ( 'cos/1' @ ( '2d.rad-of-angle/1' @ V_A ) ) @ 2.0 ) @ ( '^/2' @ ( 'sin/1' @ ( '2d.rad-of-angle/1' @ V_A ) ) @ 2.0 ) ) ) )).

thf('2d.def_sin_2*angle_axiom',axiom,(
    ! [V_A: '2d.Angle'] :
      ( ( 'sin/1' @ ( $product @ 2.0 @ ( '2d.rad-of-angle/1' @ V_A ) ) )
      = ( $product @ 2.0 @ ( $product @ ( 'cos/1' @ ( '2d.rad-of-angle/1' @ V_A ) ) @ ( 'sin/1' @ ( '2d.rad-of-angle/1' @ V_A ) ) ) ) ) )).

thf('2d.def_sin_2*angle2_axiom',axiom,(
    ! [V_A: '2d.Angle'] :
      ( ( 'sin/1' @ ( $product @ ( $to_real @ 2 ) @ ( '2d.rad-of-angle/1' @ V_A ) ) )
      = ( $product @ 2.0 @ ( $product @ ( 'cos/1' @ ( '2d.rad-of-angle/1' @ V_A ) ) @ ( 'sin/1' @ ( '2d.rad-of-angle/1' @ V_A ) ) ) ) ) )).

thf('2d.def_tan_2*angle_axiom',axiom,(
    ! [V_A: '2d.Angle'] :
      ( ( 'tan/1' @ ( $product @ 2.0 @ ( '2d.rad-of-angle/1' @ V_A ) ) )
      = ( $quotient @ ( 'sin/1' @ ( $product @ 2.0 @ ( '2d.rad-of-angle/1' @ V_A ) ) ) @ ( 'cos/1' @ ( $product @ 2.0 @ ( '2d.rad-of-angle/1' @ V_A ) ) ) ) ) )).

thf('2d.def_tan_2*angle2_axiom',axiom,(
    ! [V_A: '2d.Angle'] :
      ( ( 'tan/1' @ ( $product @ ( $to_real @ 2 ) @ ( '2d.rad-of-angle/1' @ V_A ) ) )
      = ( $quotient @ ( 'sin/1' @ ( $product @ 2.0 @ ( '2d.rad-of-angle/1' @ V_A ) ) ) @ ( 'cos/1' @ ( $product @ 2.0 @ ( '2d.rad-of-angle/1' @ V_A ) ) ) ) ) )).

thf('2d.def_cos_addition_theorem_angle_additon_axiom',axiom,(
    ! [V_A: '2d.Angle',V_B: '2d.Angle'] :
      ( ( 'cos/1' @ ( $sum @ ( '2d.rad-of-angle/1' @ V_A ) @ ( '2d.rad-of-angle/1' @ V_B ) ) )
      = ( $difference @ ( $product @ ( 'cos/1' @ ( '2d.rad-of-angle/1' @ V_A ) ) @ ( 'cos/1' @ ( '2d.rad-of-angle/1' @ V_B ) ) ) @ ( $product @ ( 'sin/1' @ ( '2d.rad-of-angle/1' @ V_A ) ) @ ( 'sin/1' @ ( '2d.rad-of-angle/1' @ V_B ) ) ) ) ) )).

thf('2d.def_cos_addition_theorem_angle_substraction_axiom',axiom,(
    ! [V_A: '2d.Angle',V_B: '2d.Angle'] :
      ( ( 'cos/1' @ ( $difference @ ( '2d.rad-of-angle/1' @ V_A ) @ ( '2d.rad-of-angle/1' @ V_B ) ) )
      = ( $sum @ ( $product @ ( 'cos/1' @ ( '2d.rad-of-angle/1' @ V_A ) ) @ ( 'cos/1' @ ( '2d.rad-of-angle/1' @ V_B ) ) ) @ ( $product @ ( 'sin/1' @ ( '2d.rad-of-angle/1' @ V_A ) ) @ ( 'sin/1' @ ( '2d.rad-of-angle/1' @ V_B ) ) ) ) ) )).

thf('2d.def_sin_addition_theorem_angle_additon_axiom',axiom,(
    ! [V_A: '2d.Angle',V_B: '2d.Angle'] :
      ( ( 'sin/1' @ ( $sum @ ( '2d.rad-of-angle/1' @ V_A ) @ ( '2d.rad-of-angle/1' @ V_B ) ) )
      = ( $sum @ ( $product @ ( 'cos/1' @ ( '2d.rad-of-angle/1' @ V_A ) ) @ ( 'sin/1' @ ( '2d.rad-of-angle/1' @ V_B ) ) ) @ ( $product @ ( 'sin/1' @ ( '2d.rad-of-angle/1' @ V_A ) ) @ ( 'cos/1' @ ( '2d.rad-of-angle/1' @ V_B ) ) ) ) ) )).

thf('2d.def_sin_addition_theorem_angle_substraction_axiom',axiom,(
    ! [V_A: '2d.Angle',V_B: '2d.Angle'] :
      ( ( 'sin/1' @ ( $difference @ ( '2d.rad-of-angle/1' @ V_A ) @ ( '2d.rad-of-angle/1' @ V_B ) ) )
      = ( $difference @ ( $product @ ( 'sin/1' @ ( '2d.rad-of-angle/1' @ V_A ) ) @ ( 'cos/1' @ ( '2d.rad-of-angle/1' @ V_B ) ) ) @ ( $product @ ( 'cos/1' @ ( '2d.rad-of-angle/1' @ V_A ) ) @ ( 'sin/1' @ ( '2d.rad-of-angle/1' @ V_B ) ) ) ) ) )).

thf('2d.def_is_right_axiom',axiom,(
    ! [V_c: '2d.Point',V_b: '2d.Point',V_a: '2d.Point'] :
      ( ( '2d.angle-type/1' @ ( '2d.angle/3' @ V_a @ V_b @ V_c ) )
     => ( ( '2d.is-right/1' @ ( '2d.angle/3' @ V_a @ V_b @ V_c ) )
      <=> ( 0.0
          = ( '2d.inner-prod/2' @ ( '2d.vec/2' @ V_b @ V_a ) @ ( '2d.vec/2' @ V_b @ V_c ) ) ) ) ) )).

thf('2d.def_is_acute_axiom',axiom,(
    ! [V_c: '2d.Point',V_b: '2d.Point',V_a: '2d.Point'] :
      ( ( '2d.angle-type/1' @ ( '2d.angle/3' @ V_a @ V_b @ V_c ) )
     => ( ( '2d.is-acute/1' @ ( '2d.angle/3' @ V_a @ V_b @ V_c ) )
      <=> ( $less @ 0.0 @ ( '2d.cos-of-angle/1' @ ( '2d.angle/3' @ V_a @ V_b @ V_c ) ) ) ) ) )).

thf('2d.def_is_obtuse_axiom',axiom,(
    ! [V_c: '2d.Point',V_b: '2d.Point',V_a: '2d.Point'] :
      ( ( '2d.angle-type/1' @ ( '2d.angle/3' @ V_a @ V_b @ V_c ) )
     => ( ( '2d.is-obtuse/1' @ ( '2d.angle/3' @ V_a @ V_b @ V_c ) )
      <=> ( $greater @ 0.0 @ ( '2d.cos-of-angle/1' @ ( '2d.angle/3' @ V_a @ V_b @ V_c ) ) ) ) ) )).

thf('2d.def-is-angle_axiom',axiom,(
    ! [V_a: '2d.Angle'] :
      ( '2d.is-angle/1' @ V_a ) )).

thf('2d.def_same_angle_axiom',axiom,(
    ! [V_a: '2d.Angle',V_b: '2d.Angle'] :
      ( ( '2d.same-angle/2' @ V_a @ V_b )
    <=> ( ( '2d.cos-of-angle/1' @ V_a )
        = ( '2d.cos-of-angle/1' @ V_b ) ) ) )).

thf('2d.def_angle_equality_axiom',axiom,(
    ! [V_F: '2d.Point',V_E: '2d.Point',V_D: '2d.Point',V_C: '2d.Point',V_B: '2d.Point',V_A: '2d.Point'] :
      ( ( ( '2d.angle-type/1' @ ( '2d.angle/3' @ V_A @ V_B @ V_C ) )
        & ( '2d.angle-type/1' @ ( '2d.angle/3' @ V_D @ V_E @ V_F ) ) )
     => ( ( ( '2d.angle/3' @ V_A @ V_B @ V_C )
          = ( '2d.angle/3' @ V_D @ V_E @ V_F ) )
      <=> ( ( V_A = V_D )
          & ( V_B = V_E )
          & ( V_C = V_F ) ) ) ) )).

thf('2d.def_angle_of_vectors_axiom',axiom,(
    ! [V_v0: '2d.Vector',V_v1: '2d.Vector'] :
      ( ( '2d.angle-of-vectors/2' @ V_v0 @ V_v1 )
      = ( '2d.angle/3' @ ( '2d.vec->point/1' @ V_v1 ) @ '2d.origin/0' @ ( '2d.vec->point/1' @ V_v0 ) ) ) )).

thf('2d.def_lt_rad_of_angle_axiom',axiom,(
    ! [V_a: '2d.Angle',V_x: $real] :
      ( ( $less @ ( '2d.rad-of-angle/1' @ V_a ) @ V_x )
    <=> ( $greater @ ( '2d.cos-of-angle/1' @ V_a ) @ ( 'cos/1' @ V_x ) ) ) )).

thf('2d.def_lt_rad_of_angle_const_rad_axiom',axiom,(
    ! [V_a: '2d.Angle',V_x: $real] :
      ( ( $less @ V_x @ ( '2d.rad-of-angle/1' @ V_a ) )
    <=> ( $greater @ ( 'cos/1' @ V_x ) @ ( '2d.cos-of-angle/1' @ V_a ) ) ) )).

thf('2d.def_gt_rad_of_angle_axiom',axiom,(
    ! [V_a: '2d.Angle',V_x: $real] :
      ( ( $greater @ ( '2d.rad-of-angle/1' @ V_a ) @ V_x )
    <=> ( $less @ ( '2d.cos-of-angle/1' @ V_a ) @ ( 'cos/1' @ V_x ) ) ) )).

thf('2d.def_gt_rad_of_angle_const_rad_axiom',axiom,(
    ! [V_a: '2d.Angle',V_x: $real] :
      ( ( $greater @ V_x @ ( '2d.rad-of-angle/1' @ V_a ) )
    <=> ( $less @ ( 'cos/1' @ V_x ) @ ( '2d.cos-of-angle/1' @ V_a ) ) ) )).

thf('2d.def_le_rad_of_angle_axiom',axiom,(
    ! [V_a: '2d.Angle',V_x: $real] :
      ( ( $lesseq @ ( '2d.rad-of-angle/1' @ V_a ) @ V_x )
    <=> ( $greatereq @ ( '2d.cos-of-angle/1' @ V_a ) @ ( 'cos/1' @ V_x ) ) ) )).

thf('2d.def_le_rad_of_angle_const_rad_axiom',axiom,(
    ! [V_a: '2d.Angle',V_x: $real] :
      ( ( $lesseq @ V_x @ ( '2d.rad-of-angle/1' @ V_a ) )
    <=> ( $greatereq @ ( 'cos/1' @ V_x ) @ ( '2d.cos-of-angle/1' @ V_a ) ) ) )).

thf('2d.def_ge_rad_of_angle_axiom',axiom,(
    ! [V_a: '2d.Angle',V_x: $real] :
      ( ( $greatereq @ ( '2d.rad-of-angle/1' @ V_a ) @ V_x )
    <=> ( $lesseq @ ( '2d.cos-of-angle/1' @ V_a ) @ ( 'cos/1' @ V_x ) ) ) )).

thf('2d.def_ge_rad_of_angle_const_rad_axiom',axiom,(
    ! [V_a: '2d.Angle',V_x: $real] :
      ( ( $greatereq @ V_x @ ( '2d.rad-of-angle/1' @ V_a ) )
    <=> ( $lesseq @ ( 'cos/1' @ V_x ) @ ( '2d.cos-of-angle/1' @ V_a ) ) ) )).

thf('2d.def_eq_rad_of_angle_axiom',axiom,(
    ! [V_a: '2d.Angle',V_x: $real] :
      ( ( ( '2d.rad-of-angle/1' @ V_a )
        = V_x )
    <=> ( ( ( '2d.cos-of-angle/1' @ V_a )
          = ( 'cos/1' @ V_x ) )
        & ( $lesseq @ 0.0 @ ( '2d.rad-of-angle/1' @ V_a ) )
        & ( $lesseq @ ( '2d.rad-of-angle/1' @ V_a ) @ 'Pi/0' )
        & ( $lesseq @ 0.0 @ ( 'sin/1' @ V_x ) ) ) ) )).

thf('2d.def_cos_of_rad_of_angle_axiom',axiom,(
    ! [V_a: '2d.Angle'] :
      ( ( 'cos/1' @ ( '2d.rad-of-angle/1' @ V_a ) )
      = ( '2d.cos-of-angle/1' @ V_a ) ) )).

thf('2d.def_sin_of_rad_of_angle_axiom',axiom,(
    ! [V_a: '2d.Angle'] :
      ( ( 'sin/1' @ ( '2d.rad-of-angle/1' @ V_a ) )
      = ( '2d.sin-of-angle/1' @ V_a ) ) )).

thf('2d.def_tan_of_rad_of_angle_axiom',axiom,(
    ! [V_a: '2d.Angle'] :
      ( ( 'tan/1' @ ( '2d.rad-of-angle/1' @ V_a ) )
      = ( '2d.tan-of-angle/1' @ V_a ) ) )).

thf('2d.def_is_interior_angle_triangle_axiom',axiom,(
    ! [V_C: '2d.Point',V_B: '2d.Point',V_A: '2d.Point',V_a: '2d.Angle'] :
      ( ( '2d.triangle-type/1' @ ( '2d.triangle/3' @ V_A @ V_B @ V_C ) )
     => ( ( '2d.is-interior-angle/2' @ V_a @ ( '2d.triangle/3' @ V_A @ V_B @ V_C ) )
      <=> ( ( V_a
            = ( '2d.angle/3' @ V_A @ V_B @ V_C ) )
          | ( V_a
            = ( '2d.angle/3' @ V_C @ V_B @ V_A ) )
          | ( V_a
            = ( '2d.angle/3' @ V_B @ V_C @ V_A ) )
          | ( V_a
            = ( '2d.angle/3' @ V_A @ V_C @ V_B ) )
          | ( V_a
            = ( '2d.angle/3' @ V_C @ V_A @ V_B ) )
          | ( V_a
            = ( '2d.angle/3' @ V_B @ V_A @ V_C ) ) ) ) ) )).

thf('2d.def_is_interior_angle_square_axiom',axiom,(
    ! [V_D: '2d.Point',V_C: '2d.Point',V_B: '2d.Point',V_A: '2d.Point',V_a: '2d.Angle'] :
      ( ( '2d.square-type/1' @ ( '2d.square/4' @ V_A @ V_B @ V_C @ V_D ) )
     => ( ( '2d.is-interior-angle/2' @ V_a @ ( '2d.square/4' @ V_A @ V_B @ V_C @ V_D ) )
      <=> ( ( V_a
            = ( '2d.angle/3' @ V_A @ V_B @ V_C ) )
          | ( V_a
            = ( '2d.angle/3' @ V_C @ V_B @ V_A ) )
          | ( V_a
            = ( '2d.angle/3' @ V_B @ V_C @ V_A ) )
          | ( V_a
            = ( '2d.angle/3' @ V_A @ V_C @ V_B ) )
          | ( V_a
            = ( '2d.angle/3' @ V_C @ V_D @ V_A ) )
          | ( V_a
            = ( '2d.angle/3' @ V_A @ V_D @ V_C ) )
          | ( V_a
            = ( '2d.angle/3' @ V_D @ V_A @ V_B ) )
          | ( V_a
            = ( '2d.angle/3' @ V_B @ V_A @ V_D ) ) ) ) ) )).

thf('2d.def_is_angle_bisector_axiom',axiom,(
    ! [V_c: '2d.Point',V_b: '2d.Point',V_a: '2d.Point',V_Q: '2d.Point',V_P: '2d.Point'] :
      ( ( ( '2d.line-type/1' @ ( '2d.line/2' @ V_P @ V_Q ) )
        & ( '2d.angle-type/1' @ ( '2d.angle/3' @ V_a @ V_b @ V_c ) ) )
     => ( ( '2d.is-angle-bisector/2' @ ( '2d.line/2' @ V_P @ V_Q ) @ ( '2d.angle/3' @ V_a @ V_b @ V_c ) )
      <=> ( ( ( '2d.colinear/3' @ V_a @ V_b @ V_c )
            & ( ( ( $less @ 0.0 @ ( '2d.inner-prod/2' @ ( '2d.vec/2' @ V_b @ V_a ) @ ( '2d.vec/2' @ V_b @ V_c ) ) )
                & ( ( '2d.line/2' @ V_P @ V_Q )
                  = ( '2d.line/2' @ V_a @ V_b ) ) )
              | ( ( $greatereq @ 0.0 @ ( '2d.inner-prod/2' @ ( '2d.vec/2' @ V_b @ V_a ) @ ( '2d.vec/2' @ V_b @ V_c ) ) )
                & ( '2d.on/2' @ V_b @ ( '2d.line/2' @ V_P @ V_Q ) )
                & ( '2d.perpendicular/2' @ ( '2d.line/2' @ V_P @ V_Q ) @ ( '2d.line/2' @ V_a @ V_c ) ) ) ) )
          | ( ~ ( '2d.colinear/3' @ V_a @ V_b @ V_c )
            & ( ( '2d.line/2' @ V_P @ V_Q )
              = ( '2d.line/2' @ V_b @ ( '2d.internally-dividing-point/3' @ V_a @ V_c @ ( $quotient @ ( '2d.distance/2' @ V_b @ V_a ) @ ( $sum @ ( '2d.distance/2' @ V_b @ V_a ) @ ( '2d.distance/2' @ V_b @ V_c ) ) ) ) ) ) ) ) ) ) )).

thf('2d.def_is_angle_bisector_seg_axiom',axiom,(
    ! [V_A: '2d.Angle',V_Q: '2d.Point',V_P: '2d.Point'] :
      ( ( '2d.segment-type/1' @ ( '2d.seg/2' @ V_P @ V_Q ) )
     => ( ( '2d.is-angle-bisector/2' @ ( '2d.seg/2' @ V_P @ V_Q ) @ V_A )
      <=> ( '2d.is-angle-bisector/2' @ ( '2d.line/2' @ V_P @ V_Q ) @ V_A ) ) ) )).

thf('2d.def-exterior-angle-of_axiom',axiom,(
    ! [V_C: '2d.Point',V_B: '2d.Point',V_A: '2d.Point'] :
      ( ( '2d.angle-type/1' @ ( '2d.angle/3' @ V_A @ V_B @ V_C ) )
     => ( ( '2d.exterior-angle-of/1' @ ( '2d.angle/3' @ V_A @ V_B @ V_C ) )
        = ( '2d.angle/3' @ V_A @ V_B @ ( '2d.vec-translate/2' @ V_B @ ( '2d.vec/2' @ V_C @ V_B ) ) ) ) ) )).

thf('2d.def_is_end_point_of_axiom',axiom,(
    ! [V_q1: '2d.Point',V_q0: '2d.Point',V_p: '2d.Point'] :
      ( ( '2d.segment-type/1' @ ( '2d.seg/2' @ V_q0 @ V_q1 ) )
     => ( ( '2d.is-end-point-of/2' @ V_p @ ( '2d.seg/2' @ V_q0 @ V_q1 ) )
      <=> ( ( V_p = V_q0 )
          | ( V_p = V_q1 ) ) ) ) )).

thf('2d.def_is_end_point_of_half_line_axiom',axiom,(
    ! [V_Q: '2d.Point',V_P: '2d.Point',V_p: '2d.Point'] :
      ( ( '2d.half-line-type/1' @ ( '2d.half-line/2' @ V_P @ V_Q ) )
     => ( ( '2d.is-end-point-of/2' @ V_p @ ( '2d.half-line/2' @ V_P @ V_Q ) )
      <=> ( V_p = V_P ) ) ) )).

thf('2d.def_vertices_of_seg_axiom',axiom,(
    ! [V_p1: '2d.Point',V_p0: '2d.Point'] :
      ( ( '2d.segment-type/1' @ ( '2d.seg/2' @ V_p0 @ V_p1 ) )
     => ( ( '2d.vertices-of/1' @ ( '2d.seg/2' @ V_p0 @ V_p1 ) )
        = ( 'cons/2' @ '2d.Point' @ V_p0 @ ( 'cons/2' @ '2d.Point' @ V_p1 @ ( 'nil/0' @ '2d.Point' ) ) ) ) ) )).

thf('2d.def_vertices_of_half_line_axiom',axiom,(
    ! [V_p1: '2d.Point',V_p0: '2d.Point'] :
      ( ( '2d.half-line-type/1' @ ( '2d.half-line/2' @ V_p0 @ V_p1 ) )
     => ( ( '2d.vertices-of/1' @ ( '2d.half-line/2' @ V_p0 @ V_p1 ) )
        = ( 'cons/2' @ '2d.Point' @ V_p0 @ ( 'nil/0' @ '2d.Point' ) ) ) ) )).

thf('2d.def_vertices_of_triangle_axiom',axiom,(
    ! [V_p2: '2d.Point',V_p1: '2d.Point',V_p0: '2d.Point'] :
      ( ( '2d.triangle-type/1' @ ( '2d.triangle/3' @ V_p0 @ V_p1 @ V_p2 ) )
     => ( ( '2d.vertices-of/1' @ ( '2d.triangle/3' @ V_p0 @ V_p1 @ V_p2 ) )
        = ( 'cons/2' @ '2d.Point' @ V_p0 @ ( 'cons/2' @ '2d.Point' @ V_p1 @ ( 'cons/2' @ '2d.Point' @ V_p2 @ ( 'nil/0' @ '2d.Point' ) ) ) ) ) ) )).

thf('2d.def_vertices_of_square_axiom',axiom,(
    ! [V_p3: '2d.Point',V_p2: '2d.Point',V_p1: '2d.Point',V_p0: '2d.Point'] :
      ( ( '2d.square-type/1' @ ( '2d.square/4' @ V_p0 @ V_p1 @ V_p2 @ V_p3 ) )
     => ( ( '2d.vertices-of/1' @ ( '2d.square/4' @ V_p0 @ V_p1 @ V_p2 @ V_p3 ) )
        = ( 'cons/2' @ '2d.Point' @ V_p0 @ ( 'cons/2' @ '2d.Point' @ V_p1 @ ( 'cons/2' @ '2d.Point' @ V_p2 @ ( 'cons/2' @ '2d.Point' @ V_p3 @ ( 'nil/0' @ '2d.Point' ) ) ) ) ) ) ) )).

thf('2d.def_vertices_of_polygon_axiom',axiom,(
    ! [V_points: ( 'ListOf' @ '2d.Point' )] :
      ( ( '2d.polygon-type/1' @ ( '2d.polygon/1' @ V_points ) )
     => ( ( '2d.vertices-of/1' @ ( '2d.polygon/1' @ V_points ) )
        = V_points ) ) )).

thf('2d.def_lines_intersect_at_base_case_axiom',axiom,(
    ! [V_p: '2d.Point'] :
      ( ( '2d.lines-intersect-at/2' @ ( 'nil/0' @ '2d.Shape' ) @ V_p )
    <=> $true ) )).

thf('2d.def_lines_intersect_at_axiom',axiom,(
    ! [V_l: '2d.Shape',V_ls: ( 'ListOf' @ '2d.Shape' ),V_p: '2d.Point'] :
      ( ( '2d.lines-intersect-at/2' @ ( 'cons/2' @ '2d.Shape' @ V_l @ V_ls ) @ V_p )
    <=> ( ( '2d.on/2' @ V_p @ V_l )
        & ( '2d.lines-intersect-at/2' @ V_ls @ V_p ) ) ) )).

thf('2d.def_lines_intersect_at_one_axiom',axiom,(
    ! [V_ls: ( 'ListOf' @ '2d.Shape' )] :
      ( ( '2d.lines-intersect-at-one/1' @ V_ls )
    <=> ? [V_p: '2d.Point'] :
          ( '2d.lines-intersect-at/2' @ V_ls @ V_p ) ) )).

thf('2d.def_seg_midpoint_of_axiom',axiom,(
    ! [V_q: '2d.Point',V_p: '2d.Point'] :
      ( ( '2d.segment-type/1' @ ( '2d.seg/2' @ V_p @ V_q ) )
     => ( ( '2d.seg-midpoint-of/1' @ ( '2d.seg/2' @ V_p @ V_q ) )
        = ( '2d.midpoint-of/2' @ V_p @ V_q ) ) ) )).

thf('2d.def-end-points-of-seg_axiom',axiom,(
    ! [V_q: '2d.Point',V_p: '2d.Point'] :
      ( ( '2d.segment-type/1' @ ( '2d.seg/2' @ V_p @ V_q ) )
     => ( ( '2d.end-points-of/1' @ ( '2d.seg/2' @ V_p @ V_q ) )
        = ( 'cons/2' @ '2d.Point' @ V_p @ ( 'cons/2' @ '2d.Point' @ V_q @ ( 'nil/0' @ '2d.Point' ) ) ) ) ) )).

thf('2d.def-end-points-of-arc_axiom',axiom,(
    ! [V_q: '2d.Point',V_p: '2d.Point',V_c: '2d.Point'] :
      ( ( '2d.arc-type/1' @ ( '2d.arc/3' @ V_c @ V_p @ V_q ) )
     => ( ( '2d.end-points-of/1' @ ( '2d.arc/3' @ V_c @ V_p @ V_q ) )
        = ( 'cons/2' @ '2d.Point' @ V_p @ ( 'cons/2' @ '2d.Point' @ V_q @ ( 'nil/0' @ '2d.Point' ) ) ) ) ) )).

thf('2d.def_seg_extension_of_line_axiom',axiom,(
    ! [V_q: '2d.Point',V_p: '2d.Point'] :
      ( ( '2d.segment-type/1' @ ( '2d.seg/2' @ V_p @ V_q ) )
     => ( ( '2d.seg-extention-of/1' @ ( '2d.seg/2' @ V_p @ V_q ) )
        = ( '2d.line/2' @ V_p @ V_q ) ) ) )).

thf('2d.def_seg_extension_of_axiom',axiom,(
    ! [V_q: '2d.Point',V_p: '2d.Point'] :
      ( ( '2d.line-type/1' @ ( '2d.line/2' @ V_p @ V_q ) )
     => ( ( '2d.seg-extention-of/1' @ ( '2d.line/2' @ V_p @ V_q ) )
        = ( '2d.line/2' @ V_p @ V_q ) ) ) )).

thf('2d.def_half_line_extension_of_axiom',axiom,(
    ! [V_q: '2d.Point',V_p: '2d.Point'] :
      ( ( '2d.half-line-type/1' @ ( '2d.half-line/2' @ V_p @ V_q ) )
     => ( ( '2d.half-line-extension-of/1' @ ( '2d.half-line/2' @ V_p @ V_q ) )
        = ( '2d.line/2' @ V_p @ V_q ) ) ) )).

thf('2d.def_divide_internally_axiom',axiom,(
    ! [V_w: $real,V_v: $real,V_b: '2d.Point',V_a: '2d.Point',V_p: '2d.Point'] :
      ( ( '2d.segment-type/1' @ ( '2d.seg/2' @ V_a @ V_b ) )
     => ( ( '2d.divide-internally/4' @ V_p @ ( '2d.seg/2' @ V_a @ V_b ) @ V_v @ V_w )
      <=> ( V_p
          = ( '2d.vec->point/1' @ ( '2d.v+/2' @ ( '2d.sv*/2' @ ( $quotient @ V_w @ ( $sum @ V_v @ V_w ) ) @ ( '2d.vec/2' @ '2d.origin/0' @ V_a ) ) @ ( '2d.sv*/2' @ ( $quotient @ V_v @ ( $sum @ V_v @ V_w ) ) @ ( '2d.vec/2' @ '2d.origin/0' @ V_b ) ) ) ) ) ) ) )).

thf('2d.def_divide_externally_axiom',axiom,(
    ! [V_w: $real,V_v: $real,V_b: '2d.Point',V_a: '2d.Point',V_p: '2d.Point'] :
      ( ( '2d.segment-type/1' @ ( '2d.seg/2' @ V_a @ V_b ) )
     => ( ( '2d.divide-externally/4' @ V_p @ ( '2d.seg/2' @ V_a @ V_b ) @ V_v @ V_w )
      <=> ( V_p
          = ( '2d.vec->point/1' @ ( '2d.v+/2' @ ( '2d.sv*/2' @ ( $quotient @ ( $uminus @ V_w ) @ ( $difference @ V_v @ V_w ) ) @ ( '2d.vec/2' @ '2d.origin/0' @ V_a ) ) @ ( '2d.sv*/2' @ ( $quotient @ V_v @ ( $difference @ V_v @ V_w ) ) @ ( '2d.vec/2' @ '2d.origin/0' @ V_b ) ) ) ) ) ) ) )).

thf('2d.def_is_perp_bisector_axiom',axiom,(
    ! [V_l: '2d.Shape',V_m: '2d.Shape'] :
      ( ( '2d.is-perp-bisector/2' @ V_l @ V_m )
    <=> ( ( '2d.perpendicular/2' @ V_l @ ( '2d.seg-extention-of/1' @ V_m ) )
        & ( '2d.on/2' @ ( '2d.seg-midpoint-of/1' @ V_m ) @ V_l ) ) ) )).

thf('2d.def_triangle_equality_axiom',axiom,(
    ! [V_f: '2d.Point',V_e: '2d.Point',V_d: '2d.Point',V_c: '2d.Point',V_b: '2d.Point',V_a: '2d.Point'] :
      ( ( ( '2d.triangle-type/1' @ ( '2d.triangle/3' @ V_a @ V_b @ V_c ) )
        & ( '2d.triangle-type/1' @ ( '2d.triangle/3' @ V_d @ V_e @ V_f ) ) )
     => ( ( ( '2d.triangle/3' @ V_a @ V_b @ V_c )
          = ( '2d.triangle/3' @ V_d @ V_e @ V_f ) )
      <=> ( ( V_a = V_d )
          & ( V_b = V_e )
          & ( V_c = V_f ) ) ) ) )).

thf('2d.def_triangle_opposite_axiom',axiom,(
    ! [V_l: '2d.Shape',V_p: '2d.Point',V_c: '2d.Point',V_b: '2d.Point',V_a: '2d.Point'] :
      ( ( '2d.triangle-type/1' @ ( '2d.triangle/3' @ V_a @ V_b @ V_c ) )
     => ( ( '2d.triangle-opposite/3' @ ( '2d.triangle/3' @ V_a @ V_b @ V_c ) @ V_p @ V_l )
      <=> ( ( ( V_p = V_a )
            & ( V_l
              = ( '2d.seg/2' @ V_b @ V_c ) ) )
          | ( ( V_p = V_b )
            & ( V_l
              = ( '2d.seg/2' @ V_c @ V_a ) ) )
          | ( ( V_p = V_c )
            & ( V_l
              = ( '2d.seg/2' @ V_a @ V_b ) ) ) ) ) ) )).

thf('2d.def_triangle_opposite_angle_axiom',axiom,(
    ! [V_l: '2d.Shape',V_A: '2d.Angle',V_c: '2d.Point',V_b: '2d.Point',V_a: '2d.Point'] :
      ( ( '2d.triangle-type/1' @ ( '2d.triangle/3' @ V_a @ V_b @ V_c ) )
     => ( ( '2d.triangle-opposite-angle/3' @ ( '2d.triangle/3' @ V_a @ V_b @ V_c ) @ V_A @ V_l )
      <=> ( ( ( V_A
              = ( '2d.angle/3' @ V_c @ V_a @ V_b ) )
            & ( V_l
              = ( '2d.seg/2' @ V_b @ V_c ) ) )
          | ( ( V_A
              = ( '2d.angle/3' @ V_a @ V_b @ V_c ) )
            & ( V_l
              = ( '2d.seg/2' @ V_c @ V_a ) ) )
          | ( ( V_A
              = ( '2d.angle/3' @ V_b @ V_c @ V_a ) )
            & ( V_l
              = ( '2d.seg/2' @ V_a @ V_b ) ) ) ) ) ) )).

thf('2d.def_is_right_triangle_axiom',axiom,(
    ! [V_a: '2d.Point',V_b: '2d.Point',V_c: '2d.Point'] :
      ( ( '2d.is-right-triangle/3' @ V_a @ V_b @ V_c )
    <=> ( ( '2d.is-triangle/3' @ V_a @ V_b @ V_c )
        & ( ( '2d.is-right/1' @ ( '2d.angle/3' @ V_c @ V_a @ V_b ) )
          | ( '2d.is-right/1' @ ( '2d.angle/3' @ V_a @ V_b @ V_c ) )
          | ( '2d.is-right/1' @ ( '2d.angle/3' @ V_b @ V_c @ V_a ) ) ) ) ) )).

thf('2d.def-is-righ-triangle-shape_axiom',axiom,(
    ! [V_c: '2d.Point',V_b: '2d.Point',V_a: '2d.Point'] :
      ( ( '2d.triangle-type/1' @ ( '2d.triangle/3' @ V_a @ V_b @ V_c ) )
     => ( ( '2d.is-right-triangle/1' @ ( '2d.triangle/3' @ V_a @ V_b @ V_c ) )
      <=> ( '2d.is-right-triangle/3' @ V_a @ V_b @ V_c ) ) ) )).

thf('2d.def_is_acute_triangle_axiom',axiom,(
    ! [V_a: '2d.Point',V_b: '2d.Point',V_c: '2d.Point'] :
      ( ( '2d.is-acute-triangle/3' @ V_a @ V_b @ V_c )
    <=> ( ( '2d.is-triangle/3' @ V_a @ V_b @ V_c )
        & ( '2d.is-acute/1' @ ( '2d.angle/3' @ V_c @ V_a @ V_b ) )
        & ( '2d.is-acute/1' @ ( '2d.angle/3' @ V_a @ V_b @ V_c ) )
        & ( '2d.is-acute/1' @ ( '2d.angle/3' @ V_b @ V_c @ V_a ) ) ) ) )).

thf('2d.def_is_acute_triangle_shape_axiom',axiom,(
    ! [V_c: '2d.Point',V_b: '2d.Point',V_a: '2d.Point'] :
      ( ( '2d.triangle-type/1' @ ( '2d.triangle/3' @ V_a @ V_b @ V_c ) )
     => ( ( '2d.is-acute-triangle/1' @ ( '2d.triangle/3' @ V_a @ V_b @ V_c ) )
      <=> ( '2d.is-acute-triangle/3' @ V_a @ V_b @ V_c ) ) ) )).

thf('2d.def_is_obtuse_triangle_axiom',axiom,(
    ! [V_a: '2d.Point',V_b: '2d.Point',V_c: '2d.Point'] :
      ( ( '2d.is-obtuse-triangle/3' @ V_a @ V_b @ V_c )
    <=> ( ( '2d.is-triangle/3' @ V_a @ V_b @ V_c )
        & ( ( '2d.is-obtuse/1' @ ( '2d.angle/3' @ V_c @ V_a @ V_b ) )
          | ( '2d.is-obtuse/1' @ ( '2d.angle/3' @ V_a @ V_b @ V_c ) )
          | ( '2d.is-obtuse/1' @ ( '2d.angle/3' @ V_b @ V_c @ V_a ) ) ) ) ) )).

thf('2d.def_is_obtuse_triangle_shape_axiom',axiom,(
    ! [V_c: '2d.Point',V_b: '2d.Point',V_a: '2d.Point'] :
      ( ( '2d.triangle-type/1' @ ( '2d.triangle/3' @ V_a @ V_b @ V_c ) )
     => ( ( '2d.is-obtuse-triangle/1' @ ( '2d.triangle/3' @ V_a @ V_b @ V_c ) )
      <=> ( '2d.is-obtuse-triangle/3' @ V_a @ V_b @ V_c ) ) ) )).

thf('2d.def_is_equilateral_triangle_axiom',axiom,(
    ! [V_a: '2d.Point',V_b: '2d.Point',V_c: '2d.Point'] :
      ( ( '2d.is-equilateral-triangle/3' @ V_a @ V_b @ V_c )
    <=> ( ( '2d.is-triangle/3' @ V_a @ V_b @ V_c )
        & ( ( '2d.distance/2' @ V_a @ V_b )
          = ( '2d.distance/2' @ V_b @ V_c ) )
        & ( ( '2d.distance/2' @ V_b @ V_c )
          = ( '2d.distance/2' @ V_c @ V_a ) ) ) ) )).

thf('2d.def_is_equilateral_triangle_shape_axiom',axiom,(
    ! [V_c: '2d.Point',V_b: '2d.Point',V_a: '2d.Point'] :
      ( ( '2d.triangle-type/1' @ ( '2d.triangle/3' @ V_a @ V_b @ V_c ) )
     => ( ( '2d.is-equilateral-triangle/1' @ ( '2d.triangle/3' @ V_a @ V_b @ V_c ) )
      <=> ( '2d.is-equilateral-triangle/3' @ V_a @ V_b @ V_c ) ) ) )).

thf('2d.def_is_isosceles_triangle_axiom',axiom,(
    ! [V_a: '2d.Point',V_b: '2d.Point',V_c: '2d.Point'] :
      ( ( '2d.is-isosceles-triangle/3' @ V_a @ V_b @ V_c )
    <=> ( ( '2d.is-triangle/3' @ V_a @ V_b @ V_c )
        & ( ( ( '2d.distance/2' @ V_a @ V_b )
            = ( '2d.distance/2' @ V_b @ V_c ) )
          | ( ( '2d.distance/2' @ V_b @ V_c )
            = ( '2d.distance/2' @ V_c @ V_a ) )
          | ( ( '2d.distance/2' @ V_c @ V_a )
            = ( '2d.distance/2' @ V_a @ V_b ) ) ) ) ) )).

thf('2d.def_is_isosceles_triangle_shape_axiom',axiom,(
    ! [V_c: '2d.Point',V_b: '2d.Point',V_a: '2d.Point'] :
      ( ( '2d.triangle-type/1' @ ( '2d.triangle/3' @ V_a @ V_b @ V_c ) )
     => ( ( '2d.is-isosceles-triangle/1' @ ( '2d.triangle/3' @ V_a @ V_b @ V_c ) )
      <=> ( '2d.is-isosceles-triangle/3' @ V_a @ V_b @ V_c ) ) ) )).

thf('2d.def_is_incenter_of_axiom',axiom,(
    ! [V_c: '2d.Point',V_b: '2d.Point',V_a: '2d.Point',V_p: '2d.Point'] :
      ( ( '2d.triangle-type/1' @ ( '2d.triangle/3' @ V_a @ V_b @ V_c ) )
     => ( ( '2d.is-incenter-of/2' @ V_p @ ( '2d.triangle/3' @ V_a @ V_b @ V_c ) )
      <=> ( V_p
          = ( '2d.vec->point/1' @ ( '2d.sv*/2' @ ( $quotient @ 1.0 @ ( $sum @ ( '2d.distance/2' @ V_a @ V_b ) @ ( $sum @ ( '2d.distance/2' @ V_b @ V_c ) @ ( '2d.distance/2' @ V_c @ V_a ) ) ) ) @ ( '2d.v+/2' @ ( '2d.sv*/2' @ ( '2d.distance/2' @ V_b @ V_c ) @ ( '2d.vec/2' @ '2d.origin/0' @ V_a ) ) @ ( '2d.v+/2' @ ( '2d.sv*/2' @ ( '2d.distance/2' @ V_c @ V_a ) @ ( '2d.vec/2' @ '2d.origin/0' @ V_b ) ) @ ( '2d.sv*/2' @ ( '2d.distance/2' @ V_a @ V_b ) @ ( '2d.vec/2' @ '2d.origin/0' @ V_c ) ) ) ) ) ) ) ) ) )).

thf('2d.def_is_circumcenter_of_axiom',axiom,(
    ! [V_c: '2d.Point',V_b: '2d.Point',V_a: '2d.Point',V_p: '2d.Point'] :
      ( ( '2d.triangle-type/1' @ ( '2d.triangle/3' @ V_a @ V_b @ V_c ) )
     => ( ( '2d.is-circumcenter-of/2' @ V_p @ ( '2d.triangle/3' @ V_a @ V_b @ V_c ) )
      <=> ( ( '2d.perpendicular/2' @ ( '2d.line/2' @ V_a @ V_b ) @ ( '2d.line/2' @ V_p @ ( '2d.midpoint-of/2' @ V_a @ V_b ) ) )
          & ( '2d.perpendicular/2' @ ( '2d.line/2' @ V_b @ V_c ) @ ( '2d.line/2' @ V_p @ ( '2d.midpoint-of/2' @ V_b @ V_c ) ) ) ) ) ) )).

thf('2d.def_is_orthocenter_of_axiom',axiom,(
    ! [V_c: '2d.Point',V_b: '2d.Point',V_a: '2d.Point',V_p: '2d.Point'] :
      ( ( '2d.triangle-type/1' @ ( '2d.triangle/3' @ V_a @ V_b @ V_c ) )
     => ( ( '2d.is-orthocenter-of/2' @ V_p @ ( '2d.triangle/3' @ V_a @ V_b @ V_c ) )
      <=> ( ( '2d.perpendicular/2' @ ( '2d.line/2' @ V_a @ V_p ) @ ( '2d.line/2' @ V_b @ V_c ) )
          & ( '2d.perpendicular/2' @ ( '2d.line/2' @ V_b @ V_p ) @ ( '2d.line/2' @ V_c @ V_a ) )
          & ( '2d.perpendicular/2' @ ( '2d.line/2' @ V_c @ V_p ) @ ( '2d.line/2' @ V_a @ V_b ) ) ) ) ) )).

thf('2d.def_center_of_gravity_of_triangle_3d_axiom',axiom,(
    ! [V_C: '2d.Point',V_B: '2d.Point',V_A: '2d.Point',V_G: '2d.Point'] :
      ( ( '2d.triangle-type/1' @ ( '2d.triangle/3' @ V_A @ V_B @ V_C ) )
     => ( ( '2d.is-center-of-gravity-of/2' @ V_G @ ( '2d.triangle/3' @ V_A @ V_B @ V_C ) )
      <=> ( V_G
          = ( '2d.vec->point/1' @ ( '2d.sv*/2' @ ( $quotient @ 1.0 @ 3.0 ) @ ( '2d.v+/2' @ ( '2d.v+/2' @ ( '2d.vec/2' @ '2d.origin/0' @ V_A ) @ ( '2d.vec/2' @ '2d.origin/0' @ V_B ) ) @ ( '2d.vec/2' @ '2d.origin/0' @ V_C ) ) ) ) ) ) ) )).

thf('2d.def_is_diagonal_of_axiom',axiom,(
    ! [V_d: '2d.Point',V_c: '2d.Point',V_b: '2d.Point',V_a: '2d.Point',V_s: '2d.Shape'] :
      ( ( '2d.square-type/1' @ ( '2d.square/4' @ V_a @ V_b @ V_c @ V_d ) )
     => ( ( '2d.is-diagonal-of/2' @ V_s @ ( '2d.square/4' @ V_a @ V_b @ V_c @ V_d ) )
      <=> ( ( V_s
            = ( '2d.seg/2' @ V_a @ V_c ) )
          | ( V_s
            = ( '2d.seg/2' @ V_b @ V_d ) ) ) ) ) )).

thf('2d.def_square_opposite_side_axiom',axiom,(
    ! [V_m: '2d.Shape',V_l: '2d.Shape',V_d: '2d.Point',V_c: '2d.Point',V_b: '2d.Point',V_a: '2d.Point'] :
      ( ( '2d.square-type/1' @ ( '2d.square/4' @ V_a @ V_b @ V_c @ V_d ) )
     => ( ( '2d.square-opposite-side/3' @ ( '2d.square/4' @ V_a @ V_b @ V_c @ V_d ) @ V_l @ V_m )
      <=> ( ( ( V_l
              = ( '2d.seg/2' @ V_a @ V_b ) )
            & ( V_m
              = ( '2d.seg/2' @ V_c @ V_d ) ) )
          | ( ( V_l
              = ( '2d.seg/2' @ V_b @ V_c ) )
            & ( V_m
              = ( '2d.seg/2' @ V_d @ V_a ) ) )
          | ( ( V_l
              = ( '2d.seg/2' @ V_c @ V_d ) )
            & ( V_m
              = ( '2d.seg/2' @ V_a @ V_b ) ) )
          | ( ( V_l
              = ( '2d.seg/2' @ V_d @ V_a ) )
            & ( V_m
              = ( '2d.seg/2' @ V_b @ V_c ) ) ) ) ) ) )).

thf('2d.def_square_opposite_angle_axiom',axiom,(
    ! [V_m: '2d.Angle',V_l: '2d.Angle',V_d: '2d.Point',V_c: '2d.Point',V_b: '2d.Point',V_a: '2d.Point'] :
      ( ( '2d.square-type/1' @ ( '2d.square/4' @ V_a @ V_b @ V_c @ V_d ) )
     => ( ( '2d.square-opposite-angle/3' @ ( '2d.square/4' @ V_a @ V_b @ V_c @ V_d ) @ V_l @ V_m )
      <=> ( ( ( V_l
              = ( '2d.angle/3' @ V_a @ V_b @ V_c ) )
            & ( V_m
              = ( '2d.angle/3' @ V_c @ V_d @ V_a ) ) )
          | ( ( V_l
              = ( '2d.angle/3' @ V_b @ V_c @ V_d ) )
            & ( V_m
              = ( '2d.angle/3' @ V_d @ V_a @ V_b ) ) ) ) ) ) )).

thf('2d.def_is_square_axiom',axiom,(
    ! [V_P: '2d.Point',V_Q: '2d.Point',V_R: '2d.Point',V_S: '2d.Point'] :
      ( ( '2d.is-square/4' @ V_P @ V_Q @ V_R @ V_S )
    <=> ( ~ ( '2d.colinear/3' @ V_P @ V_Q @ V_R )
        & ~ ( '2d.colinear/3' @ V_Q @ V_R @ V_S )
        & ~ ( '2d.colinear/3' @ V_R @ V_S @ V_P )
        & ~ ( '2d.colinear/3' @ V_S @ V_P @ V_Q )
        & ? [V_T: '2d.Point'] :
            ( '2d.intersect/3' @ ( '2d.seg/2' @ V_P @ V_R ) @ ( '2d.seg/2' @ V_Q @ V_S ) @ V_T ) ) ) )).

thf('2d.def_is_regular_square_axiom',axiom,(
    ! [V_a: '2d.Point',V_b: '2d.Point',V_c: '2d.Point',V_d: '2d.Point'] :
      ( ( '2d.is-regular-square/4' @ V_a @ V_b @ V_c @ V_d )
    <=> ( ( '2d.is-rectangle/4' @ V_a @ V_b @ V_c @ V_d )
        & ( ( '2d.distance^2/2' @ V_a @ V_b )
          = ( '2d.distance^2/2' @ V_a @ V_d ) ) ) ) )).

thf('2d.def_is_regular_square_shape_axiom',axiom,(
    ! [V_d: '2d.Point',V_c: '2d.Point',V_b: '2d.Point',V_a: '2d.Point'] :
      ( ( '2d.square-type/1' @ ( '2d.square/4' @ V_a @ V_b @ V_c @ V_d ) )
     => ( ( '2d.is-regular-square/1' @ ( '2d.square/4' @ V_a @ V_b @ V_c @ V_d ) )
      <=> ( '2d.is-regular-square/4' @ V_a @ V_b @ V_c @ V_d ) ) ) )).

thf('2d.def_is_rectangle_axiom',axiom,(
    ! [V_a: '2d.Point',V_b: '2d.Point',V_c: '2d.Point',V_d: '2d.Point'] :
      ( ( '2d.is-rectangle/4' @ V_a @ V_b @ V_c @ V_d )
    <=> ( ( '2d.is-parallelogram/4' @ V_a @ V_b @ V_c @ V_d )
        & ( '2d.perpendicular/2' @ ( '2d.line/2' @ V_a @ V_b ) @ ( '2d.line/2' @ V_b @ V_c ) ) ) ) )).

thf('2d.def_is_rectangle_shape_axiom',axiom,(
    ! [V_d: '2d.Point',V_c: '2d.Point',V_b: '2d.Point',V_a: '2d.Point'] :
      ( ( '2d.square-type/1' @ ( '2d.square/4' @ V_a @ V_b @ V_c @ V_d ) )
     => ( ( '2d.is-rectangle/1' @ ( '2d.square/4' @ V_a @ V_b @ V_c @ V_d ) )
      <=> ( '2d.is-rectangle/4' @ V_a @ V_b @ V_c @ V_d ) ) ) )).

thf('2d.def_is_rhombus_axiom',axiom,(
    ! [V_a: '2d.Point',V_b: '2d.Point',V_c: '2d.Point',V_d: '2d.Point'] :
      ( ( '2d.is-rhombus/4' @ V_a @ V_b @ V_c @ V_d )
    <=> ( ( '2d.is-square/4' @ V_a @ V_b @ V_c @ V_d )
        & ( '2d.perpendicular/2' @ ( '2d.line/2' @ V_a @ V_c ) @ ( '2d.line/2' @ V_b @ V_d ) )
        & ( ( '2d.midpoint-of/2' @ V_a @ V_c )
          = ( '2d.midpoint-of/2' @ V_b @ V_d ) ) ) ) )).

thf('2d.def_is_rhombus_shape_axiom',axiom,(
    ! [V_d: '2d.Point',V_c: '2d.Point',V_b: '2d.Point',V_a: '2d.Point'] :
      ( ( '2d.square-type/1' @ ( '2d.square/4' @ V_a @ V_b @ V_c @ V_d ) )
     => ( ( '2d.is-rhombus/1' @ ( '2d.square/4' @ V_a @ V_b @ V_c @ V_d ) )
      <=> ( '2d.is-rhombus/4' @ V_a @ V_b @ V_c @ V_d ) ) ) )).

thf('2d.def_is_parallelogram_axiom',axiom,(
    ! [V_a: '2d.Point',V_b: '2d.Point',V_c: '2d.Point',V_d: '2d.Point'] :
      ( ( '2d.is-parallelogram/4' @ V_a @ V_b @ V_c @ V_d )
    <=> ( ( '2d.is-square/4' @ V_a @ V_b @ V_c @ V_d )
        & ( ( '2d.vec/2' @ '2d.origin/0' @ V_c )
          = ( '2d.v+/2' @ ( '2d.vec/2' @ '2d.origin/0' @ V_b ) @ ( '2d.vec/2' @ V_a @ V_d ) ) ) ) ) )).

thf('2d.def_is_parallelogram_shape_axiom',axiom,(
    ! [V_d: '2d.Point',V_c: '2d.Point',V_b: '2d.Point',V_a: '2d.Point'] :
      ( ( '2d.square-type/1' @ ( '2d.square/4' @ V_a @ V_b @ V_c @ V_d ) )
     => ( ( '2d.is-parallelogram/1' @ ( '2d.square/4' @ V_a @ V_b @ V_c @ V_d ) )
      <=> ( '2d.is-parallelogram/4' @ V_a @ V_b @ V_c @ V_d ) ) ) )).

thf('2d.def_is_trapezoid_axiom',axiom,(
    ! [V_a: '2d.Point',V_b: '2d.Point',V_c: '2d.Point',V_d: '2d.Point'] :
      ( ( '2d.is-trapezoid/4' @ V_a @ V_b @ V_c @ V_d )
    <=> ( ( '2d.is-square/4' @ V_a @ V_b @ V_c @ V_d )
        & ( ( '2d.parallel/2' @ ( '2d.line/2' @ V_a @ V_b ) @ ( '2d.line/2' @ V_c @ V_d ) )
          | ( '2d.parallel/2' @ ( '2d.line/2' @ V_b @ V_c ) @ ( '2d.line/2' @ V_d @ V_a ) ) ) ) ) )).

thf('2d.def_is_trapezoid_shape_axiom',axiom,(
    ! [V_d: '2d.Point',V_c: '2d.Point',V_b: '2d.Point',V_a: '2d.Point'] :
      ( ( '2d.square-type/1' @ ( '2d.square/4' @ V_a @ V_b @ V_c @ V_d ) )
     => ( ( '2d.is-trapezoid/1' @ ( '2d.square/4' @ V_a @ V_b @ V_c @ V_d ) )
      <=> ( '2d.is-trapezoid/4' @ V_a @ V_b @ V_c @ V_d ) ) ) )).

thf('2d.def_is_polygon_3d_axiom',axiom,(
    ! [V_ps: ( 'ListOf' @ '2d.Point' )] :
      ( ( '2d.is-polygon/1' @ V_ps )
    <=> ( '2d.points-coplanar/1' @ V_ps ) ) )).

thf('2d.def_is_vertex_of_triangle_axiom',axiom,(
    ! [V_z: '2d.Point',V_y: '2d.Point',V_x: '2d.Point',V_p: '2d.Point'] :
      ( ( '2d.triangle-type/1' @ ( '2d.triangle/3' @ V_x @ V_y @ V_z ) )
     => ( ( '2d.is-vertex-of/2' @ V_p @ ( '2d.triangle/3' @ V_x @ V_y @ V_z ) )
      <=> ( ( V_p = V_x )
          | ( V_p = V_y )
          | ( V_p = V_z ) ) ) ) )).

thf('2d.def_is_vertex_of_square_axiom',axiom,(
    ! [V_w: '2d.Point',V_z: '2d.Point',V_y: '2d.Point',V_x: '2d.Point',V_p: '2d.Point'] :
      ( ( '2d.square-type/1' @ ( '2d.square/4' @ V_x @ V_y @ V_z @ V_w ) )
     => ( ( '2d.is-vertex-of/2' @ V_p @ ( '2d.square/4' @ V_x @ V_y @ V_z @ V_w ) )
      <=> ( ( V_p = V_x )
          | ( V_p = V_y )
          | ( V_p = V_z )
          | ( V_p = V_w ) ) ) ) )).

thf('2d.def_is_vertex_of_polygon_axiom',axiom,(
    ! [V_ps: ( 'ListOf' @ '2d.Point' ),V_p: '2d.Point'] :
      ( ( '2d.polygon-type/1' @ ( '2d.polygon/1' @ V_ps ) )
     => ( ( '2d.is-vertex-of/2' @ V_p @ ( '2d.polygon/1' @ V_ps ) )
      <=> ( 'member/2' @ '2d.Point' @ V_p @ V_ps ) ) ) )).

thf('2d.def-are-vertices-of-triangle_axiom',axiom,(
    ! [V_C: '2d.Point',V_B: '2d.Point',V_A: '2d.Point',V_Ps: ( 'ListOf' @ '2d.Point' )] :
      ( ( '2d.triangle-type/1' @ ( '2d.triangle/3' @ V_A @ V_B @ V_C ) )
     => ( ( '2d.are-vertices-of/2' @ V_Ps @ ( '2d.triangle/3' @ V_A @ V_B @ V_C ) )
      <=> ( 'is-a-permutation-of/2' @ '2d.Point' @ V_Ps @ ( 'cons/2' @ '2d.Point' @ V_A @ ( 'cons/2' @ '2d.Point' @ V_B @ ( 'cons/2' @ '2d.Point' @ V_C @ ( 'nil/0' @ '2d.Point' ) ) ) ) ) ) ) )).

thf('2d.def-are-vertices-of-square_axiom',axiom,(
    ! [V_D: '2d.Point',V_C: '2d.Point',V_B: '2d.Point',V_A: '2d.Point',V_Ps: ( 'ListOf' @ '2d.Point' )] :
      ( ( '2d.square-type/1' @ ( '2d.square/4' @ V_A @ V_B @ V_C @ V_D ) )
     => ( ( '2d.are-vertices-of/2' @ V_Ps @ ( '2d.square/4' @ V_A @ V_B @ V_C @ V_D ) )
      <=> ( 'all/2' @ '2d.Point'
          @ ^ [V_p: '2d.Point'] :
              ( 'member/2' @ '2d.Point' @ V_p @ ( 'cons/2' @ '2d.Point' @ V_A @ ( 'cons/2' @ '2d.Point' @ V_B @ ( 'cons/2' @ '2d.Point' @ V_C @ ( 'cons/2' @ '2d.Point' @ V_D @ ( 'nil/0' @ '2d.Point' ) ) ) ) ) )
          @ V_Ps ) ) ) )).

thf('2d.def-are-vertices-of-polygon_axiom',axiom,(
    ! [V_Qs: ( 'ListOf' @ '2d.Point' ),V_Ps: ( 'ListOf' @ '2d.Point' )] :
      ( ( '2d.polygon-type/1' @ ( '2d.polygon/1' @ V_Qs ) )
     => ( ( '2d.are-vertices-of/2' @ V_Ps @ ( '2d.polygon/1' @ V_Qs ) )
      <=> ( 'is-a-permutation-of/2' @ '2d.Point' @ V_Ps @ V_Qs ) ) ) )).

thf('2d.def_form_triangle_axiom',axiom,(
    ! [V_w: '2d.Point',V_v: '2d.Point',V_u: '2d.Point',V_r: '2d.Point',V_q: '2d.Point',V_p: '2d.Point'] :
      ( ( '2d.triangle-type/1' @ ( '2d.triangle/3' @ V_u @ V_v @ V_w ) )
     => ( ( '2d.form/2' @ ( 'cons/2' @ '2d.Point' @ V_p @ ( 'cons/2' @ '2d.Point' @ V_q @ ( 'cons/2' @ '2d.Point' @ V_r @ ( 'nil/0' @ '2d.Point' ) ) ) ) @ ( '2d.triangle/3' @ V_u @ V_v @ V_w ) )
      <=> ( ( ( V_p = V_u )
            & ( V_q = V_v )
            & ( V_r = V_w ) )
          | ( ( V_p = V_u )
            & ( V_q = V_w )
            & ( V_r = V_v ) )
          | ( ( V_p = V_v )
            & ( V_q = V_u )
            & ( V_r = V_w ) )
          | ( ( V_p = V_v )
            & ( V_q = V_w )
            & ( V_r = V_u ) )
          | ( ( V_p = V_w )
            & ( V_q = V_u )
            & ( V_r = V_v ) )
          | ( ( V_p = V_w )
            & ( V_q = V_v )
            & ( V_r = V_u ) ) ) ) ) )).

thf('2d.def_form_triangle_by_lines_axiom',axiom,(
    ! [V_w: '2d.Point',V_v: '2d.Point',V_u: '2d.Point',V_l3: '2d.Shape',V_l2: '2d.Shape',V_l1: '2d.Shape'] :
      ( ( '2d.triangle-type/1' @ ( '2d.triangle/3' @ V_u @ V_v @ V_w ) )
     => ( ( '2d.form-by-shapes/2' @ ( 'cons/2' @ '2d.Shape' @ V_l1 @ ( 'cons/2' @ '2d.Shape' @ V_l2 @ ( 'cons/2' @ '2d.Shape' @ V_l3 @ ( 'nil/0' @ '2d.Shape' ) ) ) ) @ ( '2d.triangle/3' @ V_u @ V_v @ V_w ) )
      <=> ? [V_p: '2d.Point',V_q: '2d.Point',V_r: '2d.Point'] :
            ( ( '2d.intersect/3' @ V_l1 @ V_l2 @ V_p )
            & ( '2d.intersect/3' @ V_l2 @ V_l3 @ V_q )
            & ( '2d.intersect/3' @ V_l3 @ V_l1 @ V_r )
            & ( '2d.form/2' @ ( 'cons/2' @ '2d.Point' @ V_p @ ( 'cons/2' @ '2d.Point' @ V_q @ ( 'cons/2' @ '2d.Point' @ V_r @ ( 'nil/0' @ '2d.Point' ) ) ) ) @ ( '2d.triangle/3' @ V_u @ V_v @ V_w ) ) ) ) ) )).

thf('2d.def_triangle_centroid_axiom',axiom,(
    ! [V_r: '2d.Point',V_q: '2d.Point',V_p: '2d.Point'] :
      ( ( '2d.triangle-type/1' @ ( '2d.triangle/3' @ V_p @ V_q @ V_r ) )
     => ( ( '2d.centroid-of/1' @ ( '2d.triangle/3' @ V_p @ V_q @ V_r ) )
        = ( '2d.vec->point/1' @ ( '2d.sv*/2' @ ( $quotient @ 1.0 @ 3.0 ) @ ( '2d.v+/2' @ ( '2d.vec/2' @ '2d.origin/0' @ V_p ) @ ( '2d.v+/2' @ ( '2d.vec/2' @ '2d.origin/0' @ V_q ) @ ( '2d.vec/2' @ '2d.origin/0' @ V_r ) ) ) ) ) ) ) )).

thf('2d.def_is_triangle_axiom',axiom,(
    ! [V_p: '2d.Point',V_q: '2d.Point',V_r: '2d.Point'] :
      ( ( '2d.is-triangle/3' @ V_p @ V_q @ V_r )
    <=> ~ ( '2d.colinear/3' @ V_p @ V_q @ V_r ) ) )).

thf('2d.similar-sub/2_type',type,(
    '2d.similar-sub/2': '2d.Shape' > '2d.Shape' > $o )).

thf('2d.def_similar_sub_triangle_axiom',axiom,(
    ! [V_C: '2d.Point',V_B: '2d.Point',V_A: '2d.Point',V_c: '2d.Point',V_b: '2d.Point',V_a: '2d.Point'] :
      ( ( ( '2d.triangle-type/1' @ ( '2d.triangle/3' @ V_a @ V_b @ V_c ) )
        & ( '2d.triangle-type/1' @ ( '2d.triangle/3' @ V_A @ V_B @ V_C ) ) )
     => ( ( '2d.similar-sub/2' @ ( '2d.triangle/3' @ V_a @ V_b @ V_c ) @ ( '2d.triangle/3' @ V_A @ V_B @ V_C ) )
      <=> ( ( '2d.same-angle/2' @ ( '2d.angle/3' @ V_a @ V_b @ V_c ) @ ( '2d.angle/3' @ V_A @ V_B @ V_C ) )
          & ( ( '2d.same-angle/2' @ ( '2d.angle/3' @ V_b @ V_c @ V_a ) @ ( '2d.angle/3' @ V_B @ V_C @ V_A ) )
            | ( '2d.same-angle/2' @ ( '2d.angle/3' @ V_b @ V_c @ V_a ) @ ( '2d.angle/3' @ V_C @ V_A @ V_B ) ) ) ) ) ) )).

thf('2d.def_similar_sub_square_axiom',axiom,(
    ! [V_D: '2d.Point',V_C: '2d.Point',V_B: '2d.Point',V_A: '2d.Point',V_d: '2d.Point',V_c: '2d.Point',V_b: '2d.Point',V_a: '2d.Point'] :
      ( ( ( '2d.square-type/1' @ ( '2d.square/4' @ V_a @ V_b @ V_c @ V_d ) )
        & ( '2d.square-type/1' @ ( '2d.square/4' @ V_A @ V_B @ V_C @ V_D ) ) )
     => ( ( '2d.similar-sub/2' @ ( '2d.square/4' @ V_a @ V_b @ V_c @ V_d ) @ ( '2d.square/4' @ V_A @ V_B @ V_C @ V_D ) )
      <=> ( ( '2d.same-angle/2' @ ( '2d.angle/3' @ V_d @ V_a @ V_b ) @ ( '2d.angle/3' @ V_D @ V_A @ V_B ) )
          & ( ( ( '2d.same-angle/2' @ ( '2d.angle/3' @ V_a @ V_b @ V_c ) @ ( '2d.angle/3' @ V_A @ V_B @ V_C ) )
              & ( '2d.same-angle/2' @ ( '2d.angle/3' @ V_c @ V_d @ V_a ) @ ( '2d.angle/3' @ V_C @ V_D @ V_A ) )
              & ( ( $product @ ( '2d.distance^2/2' @ V_a @ V_b ) @ ( '2d.distance^2/2' @ V_A @ V_D ) )
                = ( $product @ ( '2d.distance^2/2' @ V_a @ V_d ) @ ( '2d.distance^2/2' @ V_A @ V_B ) ) ) )
            | ( ( '2d.same-angle/2' @ ( '2d.angle/3' @ V_a @ V_b @ V_c ) @ ( '2d.angle/3' @ V_C @ V_D @ V_A ) )
              & ( '2d.same-angle/2' @ ( '2d.angle/3' @ V_c @ V_d @ V_a ) @ ( '2d.angle/3' @ V_A @ V_B @ V_C ) )
              & ( ( $product @ ( '2d.distance^2/2' @ V_a @ V_b ) @ ( '2d.distance^2/2' @ V_A @ V_B ) )
                = ( $product @ ( '2d.distance^2/2' @ V_a @ V_d ) @ ( '2d.distance^2/2' @ V_A @ V_D ) ) ) ) ) ) ) ) )).

thf('2d.def_similar_triangle_axiom',axiom,(
    ! [V_C: '2d.Point',V_B: '2d.Point',V_A: '2d.Point',V_c: '2d.Point',V_b: '2d.Point',V_a: '2d.Point'] :
      ( ( ( '2d.triangle-type/1' @ ( '2d.triangle/3' @ V_a @ V_b @ V_c ) )
        & ( '2d.triangle-type/1' @ ( '2d.triangle/3' @ V_A @ V_B @ V_C ) ) )
     => ( ( '2d.similar/2' @ ( '2d.triangle/3' @ V_a @ V_b @ V_c ) @ ( '2d.triangle/3' @ V_A @ V_B @ V_C ) )
      <=> ( ( '2d.similar-sub/2' @ ( '2d.triangle/3' @ V_a @ V_b @ V_c ) @ ( '2d.triangle/3' @ V_A @ V_B @ V_C ) )
          | ( '2d.similar-sub/2' @ ( '2d.triangle/3' @ V_a @ V_b @ V_c ) @ ( '2d.triangle/3' @ V_B @ V_C @ V_A ) )
          | ( '2d.similar-sub/2' @ ( '2d.triangle/3' @ V_a @ V_b @ V_c ) @ ( '2d.triangle/3' @ V_C @ V_A @ V_B ) ) ) ) ) )).

thf('2d.def_similar_square_axiom',axiom,(
    ! [V_D: '2d.Point',V_C: '2d.Point',V_B: '2d.Point',V_A: '2d.Point',V_d: '2d.Point',V_c: '2d.Point',V_b: '2d.Point',V_a: '2d.Point'] :
      ( ( ( '2d.square-type/1' @ ( '2d.square/4' @ V_a @ V_b @ V_c @ V_d ) )
        & ( '2d.square-type/1' @ ( '2d.square/4' @ V_A @ V_B @ V_C @ V_D ) ) )
     => ( ( '2d.similar/2' @ ( '2d.square/4' @ V_a @ V_b @ V_c @ V_d ) @ ( '2d.square/4' @ V_A @ V_B @ V_C @ V_D ) )
      <=> ( ( '2d.similar-sub/2' @ ( '2d.square/4' @ V_a @ V_b @ V_c @ V_d ) @ ( '2d.square/4' @ V_A @ V_B @ V_C @ V_D ) )
          | ( '2d.similar-sub/2' @ ( '2d.square/4' @ V_a @ V_b @ V_c @ V_d ) @ ( '2d.square/4' @ V_B @ V_C @ V_D @ V_A ) )
          | ( '2d.similar-sub/2' @ ( '2d.square/4' @ V_a @ V_b @ V_c @ V_d ) @ ( '2d.square/4' @ V_C @ V_D @ V_A @ V_B ) )
          | ( '2d.similar-sub/2' @ ( '2d.square/4' @ V_a @ V_b @ V_c @ V_d ) @ ( '2d.square/4' @ V_D @ V_A @ V_B @ V_C ) ) ) ) ) )).

thf('2d.def_ordered_similar_triangle_axiom',axiom,(
    ! [V_C: '2d.Point',V_B: '2d.Point',V_A: '2d.Point',V_c: '2d.Point',V_b: '2d.Point',V_a: '2d.Point'] :
      ( ( ( '2d.triangle-type/1' @ ( '2d.triangle/3' @ V_a @ V_b @ V_c ) )
        & ( '2d.triangle-type/1' @ ( '2d.triangle/3' @ V_A @ V_B @ V_C ) ) )
     => ( ( '2d.ordered-similar/2' @ ( '2d.triangle/3' @ V_a @ V_b @ V_c ) @ ( '2d.triangle/3' @ V_A @ V_B @ V_C ) )
      <=> ( ( '2d.same-angle/2' @ ( '2d.angle/3' @ V_a @ V_b @ V_c ) @ ( '2d.angle/3' @ V_A @ V_B @ V_C ) )
          & ( '2d.same-angle/2' @ ( '2d.angle/3' @ V_b @ V_c @ V_a ) @ ( '2d.angle/3' @ V_B @ V_C @ V_A ) ) ) ) ) )).

thf('2d.def_ordered_similar_square_axiom',axiom,(
    ! [V_D: '2d.Point',V_C: '2d.Point',V_B: '2d.Point',V_A: '2d.Point',V_d: '2d.Point',V_c: '2d.Point',V_b: '2d.Point',V_a: '2d.Point'] :
      ( ( ( '2d.square-type/1' @ ( '2d.square/4' @ V_a @ V_b @ V_c @ V_d ) )
        & ( '2d.square-type/1' @ ( '2d.square/4' @ V_A @ V_B @ V_C @ V_D ) ) )
     => ( ( '2d.ordered-similar/2' @ ( '2d.square/4' @ V_a @ V_b @ V_c @ V_d ) @ ( '2d.square/4' @ V_A @ V_B @ V_C @ V_D ) )
      <=> ( ( '2d.same-angle/2' @ ( '2d.angle/3' @ V_d @ V_a @ V_b ) @ ( '2d.angle/3' @ V_D @ V_A @ V_B ) )
          & ( '2d.same-angle/2' @ ( '2d.angle/3' @ V_a @ V_b @ V_c ) @ ( '2d.angle/3' @ V_A @ V_B @ V_C ) )
          & ( '2d.same-angle/2' @ ( '2d.angle/3' @ V_c @ V_d @ V_a ) @ ( '2d.angle/3' @ V_C @ V_D @ V_A ) )
          & ( ( $product @ ( '2d.distance^2/2' @ V_a @ V_b ) @ ( '2d.distance^2/2' @ V_A @ V_D ) )
            = ( $product @ ( '2d.distance^2/2' @ V_a @ V_d ) @ ( '2d.distance^2/2' @ V_A @ V_B ) ) ) ) ) ) )).

thf('2d.congruent-sub/2_type',type,(
    '2d.congruent-sub/2': '2d.Shape' > '2d.Shape' > $o )).

thf('2d.def_congruent_sub_triangle_axiom',axiom,(
    ! [V_C: '2d.Point',V_B: '2d.Point',V_A: '2d.Point',V_c: '2d.Point',V_b: '2d.Point',V_a: '2d.Point'] :
      ( ( ( '2d.triangle-type/1' @ ( '2d.triangle/3' @ V_a @ V_b @ V_c ) )
        & ( '2d.triangle-type/1' @ ( '2d.triangle/3' @ V_A @ V_B @ V_C ) ) )
     => ( ( '2d.congruent-sub/2' @ ( '2d.triangle/3' @ V_a @ V_b @ V_c ) @ ( '2d.triangle/3' @ V_A @ V_B @ V_C ) )
      <=> ( ( ( '2d.distance^2/2' @ V_a @ V_b )
            = ( '2d.distance^2/2' @ V_A @ V_B ) )
          & ( ( ( ( '2d.distance^2/2' @ V_b @ V_c )
                = ( '2d.distance^2/2' @ V_B @ V_C ) )
              & ( ( '2d.distance^2/2' @ V_c @ V_a )
                = ( '2d.distance^2/2' @ V_C @ V_A ) ) )
            | ( ( ( '2d.distance^2/2' @ V_b @ V_c )
                = ( '2d.distance^2/2' @ V_C @ V_A ) )
              & ( ( '2d.distance^2/2' @ V_c @ V_a )
                = ( '2d.distance^2/2' @ V_B @ V_C ) ) ) ) ) ) ) )).

thf('2d.def_congruent_sub_square_axiom',axiom,(
    ! [V_D: '2d.Point',V_C: '2d.Point',V_B: '2d.Point',V_A: '2d.Point',V_d: '2d.Point',V_c: '2d.Point',V_b: '2d.Point',V_a: '2d.Point'] :
      ( ( ( '2d.square-type/1' @ ( '2d.square/4' @ V_a @ V_b @ V_c @ V_d ) )
        & ( '2d.square-type/1' @ ( '2d.square/4' @ V_A @ V_B @ V_C @ V_D ) ) )
     => ( ( '2d.congruent-sub/2' @ ( '2d.square/4' @ V_a @ V_b @ V_c @ V_d ) @ ( '2d.square/4' @ V_A @ V_B @ V_C @ V_D ) )
      <=> ( ( '2d.same-angle/2' @ ( '2d.angle/3' @ V_d @ V_a @ V_b ) @ ( '2d.angle/3' @ V_D @ V_A @ V_B ) )
          & ( ( ( '2d.same-angle/2' @ ( '2d.angle/3' @ V_a @ V_b @ V_c ) @ ( '2d.angle/3' @ V_A @ V_B @ V_C ) )
              & ( '2d.same-angle/2' @ ( '2d.angle/3' @ V_c @ V_d @ V_a ) @ ( '2d.angle/3' @ V_C @ V_D @ V_A ) )
              & ( ( '2d.distance^2/2' @ V_a @ V_b )
                = ( '2d.distance^2/2' @ V_A @ V_B ) )
              & ( ( '2d.distance^2/2' @ V_a @ V_d )
                = ( '2d.distance^2/2' @ V_A @ V_D ) ) )
            | ( ( '2d.same-angle/2' @ ( '2d.angle/3' @ V_a @ V_b @ V_c ) @ ( '2d.angle/3' @ V_C @ V_D @ V_A ) )
              & ( '2d.same-angle/2' @ ( '2d.angle/3' @ V_c @ V_d @ V_a ) @ ( '2d.angle/3' @ V_A @ V_B @ V_C ) )
              & ( ( '2d.distance^2/2' @ V_a @ V_b )
                = ( '2d.distance^2/2' @ V_A @ V_D ) )
              & ( ( '2d.distance^2/2' @ V_a @ V_d )
                = ( '2d.distance^2/2' @ V_A @ V_B ) ) ) ) ) ) ) )).

thf('2d.def_congruent_triangle_axiom',axiom,(
    ! [V_C: '2d.Point',V_B: '2d.Point',V_A: '2d.Point',V_c: '2d.Point',V_b: '2d.Point',V_a: '2d.Point'] :
      ( ( ( '2d.triangle-type/1' @ ( '2d.triangle/3' @ V_a @ V_b @ V_c ) )
        & ( '2d.triangle-type/1' @ ( '2d.triangle/3' @ V_A @ V_B @ V_C ) ) )
     => ( ( '2d.congruent/2' @ ( '2d.triangle/3' @ V_a @ V_b @ V_c ) @ ( '2d.triangle/3' @ V_A @ V_B @ V_C ) )
      <=> ( ( '2d.congruent-sub/2' @ ( '2d.triangle/3' @ V_a @ V_b @ V_c ) @ ( '2d.triangle/3' @ V_A @ V_B @ V_C ) )
          | ( '2d.congruent-sub/2' @ ( '2d.triangle/3' @ V_a @ V_b @ V_c ) @ ( '2d.triangle/3' @ V_B @ V_C @ V_A ) )
          | ( '2d.congruent-sub/2' @ ( '2d.triangle/3' @ V_a @ V_b @ V_c ) @ ( '2d.triangle/3' @ V_C @ V_A @ V_B ) ) ) ) ) )).

thf('2d.def_congruent_square_axiom',axiom,(
    ! [V_D: '2d.Point',V_C: '2d.Point',V_B: '2d.Point',V_A: '2d.Point',V_d: '2d.Point',V_c: '2d.Point',V_b: '2d.Point',V_a: '2d.Point'] :
      ( ( ( '2d.square-type/1' @ ( '2d.square/4' @ V_a @ V_b @ V_c @ V_d ) )
        & ( '2d.square-type/1' @ ( '2d.square/4' @ V_A @ V_B @ V_C @ V_D ) ) )
     => ( ( '2d.congruent/2' @ ( '2d.square/4' @ V_a @ V_b @ V_c @ V_d ) @ ( '2d.square/4' @ V_A @ V_B @ V_C @ V_D ) )
      <=> ( ( '2d.congruent-sub/2' @ ( '2d.square/4' @ V_a @ V_b @ V_c @ V_d ) @ ( '2d.square/4' @ V_A @ V_B @ V_C @ V_D ) )
          | ( '2d.congruent-sub/2' @ ( '2d.square/4' @ V_a @ V_b @ V_c @ V_d ) @ ( '2d.square/4' @ V_B @ V_C @ V_D @ V_A ) )
          | ( '2d.congruent-sub/2' @ ( '2d.square/4' @ V_a @ V_b @ V_c @ V_d ) @ ( '2d.square/4' @ V_C @ V_D @ V_A @ V_B ) )
          | ( '2d.congruent-sub/2' @ ( '2d.square/4' @ V_a @ V_b @ V_c @ V_d ) @ ( '2d.square/4' @ V_D @ V_A @ V_B @ V_C ) ) ) ) ) )).

thf('2d.def_ordered_congruent_triangle_axiom',axiom,(
    ! [V_C: '2d.Point',V_B: '2d.Point',V_A: '2d.Point',V_c: '2d.Point',V_b: '2d.Point',V_a: '2d.Point'] :
      ( ( ( '2d.triangle-type/1' @ ( '2d.triangle/3' @ V_a @ V_b @ V_c ) )
        & ( '2d.triangle-type/1' @ ( '2d.triangle/3' @ V_A @ V_B @ V_C ) ) )
     => ( ( '2d.ordered-congruent/2' @ ( '2d.triangle/3' @ V_a @ V_b @ V_c ) @ ( '2d.triangle/3' @ V_A @ V_B @ V_C ) )
      <=> ( ( ( '2d.distance^2/2' @ V_a @ V_b )
            = ( '2d.distance^2/2' @ V_A @ V_B ) )
          & ( ( '2d.distance^2/2' @ V_b @ V_c )
            = ( '2d.distance^2/2' @ V_B @ V_C ) )
          & ( ( '2d.distance^2/2' @ V_c @ V_a )
            = ( '2d.distance^2/2' @ V_C @ V_A ) ) ) ) ) )).

thf('2d.def_ordered_congruent_square_axiom',axiom,(
    ! [V_D: '2d.Point',V_C: '2d.Point',V_B: '2d.Point',V_A: '2d.Point',V_d: '2d.Point',V_c: '2d.Point',V_b: '2d.Point',V_a: '2d.Point'] :
      ( ( ( '2d.square-type/1' @ ( '2d.square/4' @ V_a @ V_b @ V_c @ V_d ) )
        & ( '2d.square-type/1' @ ( '2d.square/4' @ V_A @ V_B @ V_C @ V_D ) ) )
     => ( ( '2d.ordered-congruent/2' @ ( '2d.square/4' @ V_a @ V_b @ V_c @ V_d ) @ ( '2d.square/4' @ V_A @ V_B @ V_C @ V_D ) )
      <=> ( ( '2d.same-angle/2' @ ( '2d.angle/3' @ V_d @ V_a @ V_b ) @ ( '2d.angle/3' @ V_D @ V_A @ V_B ) )
          & ( '2d.same-angle/2' @ ( '2d.angle/3' @ V_a @ V_b @ V_c ) @ ( '2d.angle/3' @ V_A @ V_B @ V_C ) )
          & ( '2d.same-angle/2' @ ( '2d.angle/3' @ V_c @ V_d @ V_a ) @ ( '2d.angle/3' @ V_C @ V_D @ V_A ) )
          & ( ( '2d.distance^2/2' @ V_a @ V_b )
            = ( '2d.distance^2/2' @ V_A @ V_B ) )
          & ( ( '2d.distance^2/2' @ V_a @ V_d )
            = ( '2d.distance^2/2' @ V_A @ V_D ) ) ) ) ) )).

thf('2d.def_is_regular_polygon_axiom',axiom,(
    ! [V_ps: ( 'ListOf' @ '2d.Point' ),V_p2: '2d.Point',V_p1: '2d.Point',V_p0: '2d.Point'] :
      ( ( '2d.polygon-type/1' @ ( '2d.polygon/1' @ ( 'cons/2' @ '2d.Point' @ V_p0 @ ( 'cons/2' @ '2d.Point' @ V_p1 @ ( 'cons/2' @ '2d.Point' @ V_p2 @ V_ps ) ) ) ) )
     => ( ( '2d.is-regular-polygon/1' @ ( '2d.polygon/1' @ ( 'cons/2' @ '2d.Point' @ V_p0 @ ( 'cons/2' @ '2d.Point' @ V_p1 @ ( 'cons/2' @ '2d.Point' @ V_p2 @ V_ps ) ) ) ) )
      <=> ( ( '2d.points-coplanar/1' @ ( 'cons/2' @ '2d.Point' @ V_p0 @ ( 'cons/2' @ '2d.Point' @ V_p1 @ ( 'cons/2' @ '2d.Point' @ V_p2 @ V_ps ) ) ) )
          & ( '2d.points-with-equal-interval/1' @ ( 'cons/2' @ '2d.Point' @ V_p0 @ ( 'cons/2' @ '2d.Point' @ V_p1 @ ( 'cons/2' @ '2d.Point' @ V_p2 @ V_ps ) ) ) )
          & ( '2d.points-bending-by-equal-angle/1' @ ( 'cons/2' @ '2d.Point' @ V_p0 @ ( 'cons/2' @ '2d.Point' @ V_p1 @ ( 'cons/2' @ '2d.Point' @ V_p2 @ V_ps ) ) ) )
          & ( '2d.points-bending-to-same-side/1' @ ( 'cons/2' @ '2d.Point' @ V_p0 @ ( 'cons/2' @ '2d.Point' @ V_p1 @ ( 'cons/2' @ '2d.Point' @ V_p2 @ V_ps ) ) ) )
          & ( 'all/2' @ '2d.Point'
            @ ^ [V_p: '2d.Point'] :
                ( '2d.on/2' @ V_p @ ( '2d.inner-part-of/1' @ ( '2d.divided-region-including/2' @ ( '2d.line/2' @ V_p0 @ V_p1 ) @ V_p2 ) ) )
            @ V_ps ) ) ) ) )).

thf('2d.is-convex-shape-rec/1_type',type,(
    '2d.is-convex-shape-rec/1': '2d.Shape' > $o )).

thf('2d.def_is_convex_shape_rec_polygon0_axiom',axiom,
    ( ( '2d.is-convex-shape-rec/1' @ ( '2d.polygon/1' @ ( 'nil/0' @ '2d.Point' ) ) )
  <=> $true )).

thf('2d.def_is_convex_shape_rec_polygon1_axiom',axiom,(
    ! [V_p0: '2d.Point'] :
      ( ( '2d.polygon-type/1' @ ( '2d.polygon/1' @ ( 'cons/2' @ '2d.Point' @ V_p0 @ ( 'nil/0' @ '2d.Point' ) ) ) )
     => ( ( '2d.is-convex-shape-rec/1' @ ( '2d.polygon/1' @ ( 'cons/2' @ '2d.Point' @ V_p0 @ ( 'nil/0' @ '2d.Point' ) ) ) )
      <=> $true ) ) )).

thf('2d.def_is_convex_shape_rec_polygon2_axiom',axiom,(
    ! [V_p1: '2d.Point',V_p0: '2d.Point'] :
      ( ( '2d.polygon-type/1' @ ( '2d.polygon/1' @ ( 'cons/2' @ '2d.Point' @ V_p0 @ ( 'cons/2' @ '2d.Point' @ V_p1 @ ( 'nil/0' @ '2d.Point' ) ) ) ) )
     => ( ( '2d.is-convex-shape-rec/1' @ ( '2d.polygon/1' @ ( 'cons/2' @ '2d.Point' @ V_p0 @ ( 'cons/2' @ '2d.Point' @ V_p1 @ ( 'nil/0' @ '2d.Point' ) ) ) ) )
      <=> $true ) ) )).

thf('2d.def_is_convex_shape_rec_polygon3_axiom',axiom,(
    ! [V_p2: '2d.Point',V_p1: '2d.Point',V_p0: '2d.Point'] :
      ( ( '2d.polygon-type/1' @ ( '2d.polygon/1' @ ( 'cons/2' @ '2d.Point' @ V_p2 @ ( 'cons/2' @ '2d.Point' @ V_p0 @ ( 'cons/2' @ '2d.Point' @ V_p1 @ ( 'nil/0' @ '2d.Point' ) ) ) ) ) )
     => ( ( '2d.is-convex-shape-rec/1' @ ( '2d.polygon/1' @ ( 'cons/2' @ '2d.Point' @ V_p2 @ ( 'cons/2' @ '2d.Point' @ V_p0 @ ( 'cons/2' @ '2d.Point' @ V_p1 @ ( 'nil/0' @ '2d.Point' ) ) ) ) ) )
      <=> $true ) ) )).

thf('2d.def_is_convex_shape_polygon_rec_axiom',axiom,(
    ! [V_ps: ( 'ListOf' @ '2d.Point' ),V_p2: '2d.Point',V_p1: '2d.Point',V_p0: '2d.Point'] :
      ( ( '2d.polygon-type/1' @ ( '2d.polygon/1' @ ( 'cons/2' @ '2d.Point' @ V_p0 @ ( 'cons/2' @ '2d.Point' @ V_p1 @ ( 'cons/2' @ '2d.Point' @ V_p2 @ V_ps ) ) ) ) )
     => ( ( '2d.is-convex-shape/1' @ ( '2d.polygon/1' @ ( 'cons/2' @ '2d.Point' @ V_p0 @ ( 'cons/2' @ '2d.Point' @ V_p1 @ ( 'cons/2' @ '2d.Point' @ V_p2 @ V_ps ) ) ) ) )
      <=> ( ( 'all/2' @ '2d.Point'
            @ ^ [V_p: '2d.Point'] :
                ( '2d.on/2' @ V_p @ ( '2d.inner-part-of/1' @ ( '2d.divided-region-including/2' @ ( '2d.line/2' @ V_p0 @ V_p1 ) @ V_p2 ) ) )
            @ V_ps )
          & ( '2d.is-convex-shape-rec/1' @ ( '2d.polygon/1' @ ( 'cons/2' @ '2d.Point' @ V_p1 @ ( 'cons/2' @ '2d.Point' @ V_p2 @ V_ps ) ) ) ) ) ) ) )).

thf('2d.def_is_convex_shape_polygon_axiom',axiom,(
    ! [V_vertices: ( 'ListOf' @ '2d.Point' )] :
      ( ( '2d.polygon-type/1' @ ( '2d.polygon/1' @ V_vertices ) )
     => ( ( '2d.is-convex-shape/1' @ ( '2d.polygon/1' @ V_vertices ) )
      <=> ( ( '2d.points-bending-to-same-side/1' @ V_vertices )
          & ( '2d.is-convex-shape-rec/1' @ ( '2d.polygon/1' @ V_vertices ) ) ) ) ) )).

thf('2d.def_center_of_arc_by_three_points_axiom',axiom,(
    ! [V_q: '2d.Point',V_p: '2d.Point',V_c: '2d.Point'] :
      ( ( '2d.arc-type/1' @ ( '2d.arc/3' @ V_c @ V_p @ V_q ) )
     => ( ( '2d.center-of/1' @ ( '2d.arc/3' @ V_c @ V_p @ V_q ) )
        = V_c ) ) )).

thf('2d.def_center_of_major_arc_by_three_points_axiom',axiom,(
    ! [V_q: '2d.Point',V_p: '2d.Point',V_c: '2d.Point'] :
      ( ( '2d.arc-type/1' @ ( '2d.arc/3' @ V_c @ V_p @ V_q ) )
     => ( ( '2d.center-of/1' @ ( '2d.major-arc/1' @ ( '2d.arc/3' @ V_c @ V_p @ V_q ) ) )
        = V_c ) ) )).

thf('2d.def_center_of_minor_arc_by_three_points_axiom',axiom,(
    ! [V_q: '2d.Point',V_p: '2d.Point',V_c: '2d.Point'] :
      ( ( '2d.arc-type/1' @ ( '2d.arc/3' @ V_c @ V_p @ V_q ) )
     => ( ( '2d.center-of/1' @ ( '2d.minor-arc/1' @ ( '2d.arc/3' @ V_c @ V_p @ V_q ) ) )
        = V_c ) ) )).

thf('2d.def_arc_by_three_points_ini_point_axiom',axiom,(
    ! [V_q: '2d.Point',V_p: '2d.Point',V_c: '2d.Point'] :
      ( ( '2d.arc-type/1' @ ( '2d.arc/3' @ V_c @ V_p @ V_q ) )
     => ( ( '2d.arc-ini-point/1' @ ( '2d.arc/3' @ V_c @ V_p @ V_q ) )
        = V_p ) ) )).

thf('2d.def_major_arc_by_three_points_ini_point_axiom',axiom,(
    ! [V_q: '2d.Point',V_p: '2d.Point',V_c: '2d.Point'] :
      ( ( '2d.arc-type/1' @ ( '2d.arc/3' @ V_c @ V_p @ V_q ) )
     => ( ( '2d.arc-ini-point/1' @ ( '2d.major-arc/1' @ ( '2d.arc/3' @ V_c @ V_p @ V_q ) ) )
        = ( '2d.arc-ini-point/1' @ ( '2d.arc/3' @ V_c @ V_p @ V_q ) ) ) ) )).

thf('2d.def_minor_arc_by_three_points_ini_point_axiom',axiom,(
    ! [V_q: '2d.Point',V_p: '2d.Point',V_c: '2d.Point'] :
      ( ( '2d.arc-type/1' @ ( '2d.arc/3' @ V_c @ V_p @ V_q ) )
     => ( ( '2d.arc-ini-point/1' @ ( '2d.minor-arc/1' @ ( '2d.arc/3' @ V_c @ V_p @ V_q ) ) )
        = ( '2d.arc-ini-point/1' @ ( '2d.arc/3' @ V_c @ V_p @ V_q ) ) ) ) )).

thf('2d.def_arc_by_three_points_end_point_axiom',axiom,(
    ! [V_q: '2d.Point',V_p: '2d.Point',V_c: '2d.Point'] :
      ( ( '2d.arc-type/1' @ ( '2d.arc/3' @ V_c @ V_p @ V_q ) )
     => ( ( '2d.arc-end-point/1' @ ( '2d.arc/3' @ V_c @ V_p @ V_q ) )
        = V_q ) ) )).

thf('2d.def_major_arc_by_three_points_end_point_axiom',axiom,(
    ! [V_q: '2d.Point',V_p: '2d.Point',V_c: '2d.Point'] :
      ( ( '2d.arc-type/1' @ ( '2d.arc/3' @ V_c @ V_p @ V_q ) )
     => ( ( '2d.arc-end-point/1' @ ( '2d.major-arc/1' @ ( '2d.arc/3' @ V_c @ V_p @ V_q ) ) )
        = ( '2d.arc-end-point/1' @ ( '2d.arc/3' @ V_c @ V_p @ V_q ) ) ) ) )).

thf('2d.def_minor_arc_by_three_points_end_point_axiom',axiom,(
    ! [V_q: '2d.Point',V_p: '2d.Point',V_c: '2d.Point'] :
      ( ( '2d.arc-type/1' @ ( '2d.arc/3' @ V_c @ V_p @ V_q ) )
     => ( ( '2d.arc-end-point/1' @ ( '2d.minor-arc/1' @ ( '2d.arc/3' @ V_c @ V_p @ V_q ) ) )
        = ( '2d.arc-end-point/1' @ ( '2d.arc/3' @ V_c @ V_p @ V_q ) ) ) ) )).

thf('2d.def_major_arc_by_three_arc_central_angle_axiom',axiom,(
    ! [V_q: '2d.Point',V_p: '2d.Point',V_c: '2d.Point'] :
      ( ( '2d.arc-type/1' @ ( '2d.arc/3' @ V_c @ V_p @ V_q ) )
     => ( ( '2d.arc-central-angle/1' @ ( '2d.major-arc/1' @ ( '2d.arc/3' @ V_c @ V_p @ V_q ) ) )
        = ( $difference @ ( $product @ 2.0 @ 'Pi/0' ) @ ( '2d.rad-of-angle/1' @ ( '2d.angle-of-vectors/2' @ ( '2d.vec/2' @ V_c @ V_p ) @ ( '2d.vec/2' @ V_c @ V_q ) ) ) ) ) ) )).

thf('2d.def_minor_arc_by_three_arc_central_angle_axiom',axiom,(
    ! [V_q: '2d.Point',V_p: '2d.Point',V_c: '2d.Point'] :
      ( ( '2d.arc-type/1' @ ( '2d.arc/3' @ V_c @ V_p @ V_q ) )
     => ( ( '2d.arc-central-angle/1' @ ( '2d.minor-arc/1' @ ( '2d.arc/3' @ V_c @ V_p @ V_q ) ) )
        = ( '2d.rad-of-angle/1' @ ( '2d.angle-of-vectors/2' @ ( '2d.vec/2' @ V_c @ V_p ) @ ( '2d.vec/2' @ V_c @ V_q ) ) ) ) ) )).

thf('2d.def_arc_by_three_arc_central_angle_axiom',axiom,(
    ! [V_q: '2d.Point',V_p: '2d.Point',V_c: '2d.Point'] :
      ( ( '2d.arc-type/1' @ ( '2d.arc/3' @ V_c @ V_p @ V_q ) )
     => ( ( '2d.arc-central-angle/1' @ ( '2d.arc/3' @ V_c @ V_p @ V_q ) )
        = ( '2d.arc-central-angle/1' @ ( '2d.minor-arc/1' @ ( '2d.arc/3' @ V_c @ V_p @ V_q ) ) ) ) ) )).

thf('2d.def_major_arc_by_three_points_equality_axiom',axiom,(
    ! [V_q2: '2d.Point',V_p2: '2d.Point',V_c2: '2d.Point',V_q1: '2d.Point',V_p1: '2d.Point',V_c1: '2d.Point'] :
      ( ( ( '2d.arc-type/1' @ ( '2d.arc/3' @ V_c1 @ V_p1 @ V_q1 ) )
        & ( '2d.arc-type/1' @ ( '2d.arc/3' @ V_c2 @ V_p2 @ V_q2 ) ) )
     => ( ( ( '2d.major-arc/1' @ ( '2d.arc/3' @ V_c1 @ V_p1 @ V_q1 ) )
          = ( '2d.major-arc/1' @ ( '2d.arc/3' @ V_c2 @ V_p2 @ V_q2 ) ) )
      <=> ( ( V_c1 = V_c2 )
          & ( V_p1 = V_p2 )
          & ( V_q1 = V_q2 ) ) ) ) )).

thf('2d.def_minor_arc_by_three_points_equality_axiom',axiom,(
    ! [V_q2: '2d.Point',V_p2: '2d.Point',V_c2: '2d.Point',V_q1: '2d.Point',V_p1: '2d.Point',V_c1: '2d.Point'] :
      ( ( ( '2d.arc-type/1' @ ( '2d.arc/3' @ V_c1 @ V_p1 @ V_q1 ) )
        & ( '2d.arc-type/1' @ ( '2d.arc/3' @ V_c2 @ V_p2 @ V_q2 ) ) )
     => ( ( ( '2d.minor-arc/1' @ ( '2d.arc/3' @ V_c1 @ V_p1 @ V_q1 ) )
          = ( '2d.minor-arc/1' @ ( '2d.arc/3' @ V_c2 @ V_p2 @ V_q2 ) ) )
      <=> ( ( V_c1 = V_c2 )
          & ( V_p1 = V_p2 )
          & ( V_q1 = V_q2 ) ) ) ) )).

thf('2d.def_arc_by_three_points_equality1_axiom',axiom,(
    ! [V_shape: '2d.Shape',V_q1: '2d.Point',V_p1: '2d.Point',V_c1: '2d.Point'] :
      ( ( '2d.arc-type/1' @ ( '2d.arc/3' @ V_c1 @ V_p1 @ V_q1 ) )
     => ( ( V_shape
          = ( '2d.arc/3' @ V_c1 @ V_p1 @ V_q1 ) )
      <=> ( ( '2d.minor-arc/1' @ ( '2d.arc/3' @ V_c1 @ V_p1 @ V_q1 ) )
          = V_shape ) ) ) )).

thf('2d.def_arc_by_three_points_equality2_axiom',axiom,(
    ! [V_shape: '2d.Shape',V_q1: '2d.Point',V_p1: '2d.Point',V_c1: '2d.Point'] :
      ( ( '2d.arc-type/1' @ ( '2d.arc/3' @ V_c1 @ V_p1 @ V_q1 ) )
     => ( ( ( '2d.arc/3' @ V_c1 @ V_p1 @ V_q1 )
          = V_shape )
      <=> ( V_shape
          = ( '2d.minor-arc/1' @ ( '2d.arc/3' @ V_c1 @ V_p1 @ V_q1 ) ) ) ) ) )).

thf('2d.def_major_minor_arc_by_three_points_equality_axiom',axiom,(
    ! [V_q2: '2d.Point',V_p2: '2d.Point',V_c2: '2d.Point',V_q1: '2d.Point',V_p1: '2d.Point',V_c1: '2d.Point'] :
      ( ( ( '2d.arc-type/1' @ ( '2d.arc/3' @ V_c1 @ V_p1 @ V_q1 ) )
        & ( '2d.arc-type/1' @ ( '2d.arc/3' @ V_c2 @ V_p2 @ V_q2 ) ) )
     => ( ( ( '2d.major-arc/1' @ ( '2d.arc/3' @ V_c1 @ V_p1 @ V_q1 ) )
          = ( '2d.minor-arc/1' @ ( '2d.arc/3' @ V_c2 @ V_p2 @ V_q2 ) ) )
      <=> $false ) ) )).

thf('2d.def_minor_major_arc_by_three_points_equality_axiom',axiom,(
    ! [V_q2: '2d.Point',V_p2: '2d.Point',V_c2: '2d.Point',V_q1: '2d.Point',V_p1: '2d.Point',V_c1: '2d.Point'] :
      ( ( ( '2d.arc-type/1' @ ( '2d.arc/3' @ V_c1 @ V_p1 @ V_q1 ) )
        & ( '2d.arc-type/1' @ ( '2d.arc/3' @ V_c2 @ V_p2 @ V_q2 ) ) )
     => ( ( ( '2d.minor-arc/1' @ ( '2d.arc/3' @ V_c1 @ V_p1 @ V_q1 ) )
          = ( '2d.major-arc/1' @ ( '2d.arc/3' @ V_c2 @ V_p2 @ V_q2 ) ) )
      <=> ( ( '2d.major-arc/1' @ ( '2d.arc/3' @ V_c1 @ V_p1 @ V_q1 ) )
          = ( '2d.minor-arc/1' @ ( '2d.arc/3' @ V_c2 @ V_p2 @ V_q2 ) ) ) ) ) )).

thf('2d.def_radius_of_arc_by_three_points_axiom',axiom,(
    ! [V_q: '2d.Point',V_p: '2d.Point',V_c: '2d.Point'] :
      ( ( '2d.arc-type/1' @ ( '2d.arc/3' @ V_c @ V_p @ V_q ) )
     => ( ( '2d.radius-of/1' @ ( '2d.arc/3' @ V_c @ V_p @ V_q ) )
        = ( '2d.radius-of/1' @ ( '2d.arc-shape/1' @ ( '2d.arc/3' @ V_c @ V_p @ V_q ) ) ) ) ) )).

thf('2d.def_radius_of_major_arc_by_three_points_axiom',axiom,(
    ! [V_q: '2d.Point',V_p: '2d.Point',V_c: '2d.Point'] :
      ( ( '2d.arc-type/1' @ ( '2d.arc/3' @ V_c @ V_p @ V_q ) )
     => ( ( '2d.radius-of/1' @ ( '2d.major-arc/1' @ ( '2d.arc/3' @ V_c @ V_p @ V_q ) ) )
        = ( '2d.radius-of/1' @ ( '2d.arc-shape/1' @ ( '2d.major-arc/1' @ ( '2d.arc/3' @ V_c @ V_p @ V_q ) ) ) ) ) ) )).

thf('2d.def_radius_of_minor_arc_by_three_points_axiom',axiom,(
    ! [V_q: '2d.Point',V_p: '2d.Point',V_c: '2d.Point'] :
      ( ( '2d.arc-type/1' @ ( '2d.arc/3' @ V_c @ V_p @ V_q ) )
     => ( ( '2d.radius-of/1' @ ( '2d.minor-arc/1' @ ( '2d.arc/3' @ V_c @ V_p @ V_q ) ) )
        = ( '2d.radius-of/1' @ ( '2d.arc-shape/1' @ ( '2d.minor-arc/1' @ ( '2d.arc/3' @ V_c @ V_p @ V_q ) ) ) ) ) ) )).

thf('2d.def_length_of_arc_by_three_points_axiom',axiom,(
    ! [V_q: '2d.Point',V_p: '2d.Point',V_c: '2d.Point'] :
      ( ( '2d.arc-type/1' @ ( '2d.arc/3' @ V_c @ V_p @ V_q ) )
     => ( ( '2d.length-of/1' @ ( '2d.arc/3' @ V_c @ V_p @ V_q ) )
        = ( '2d.length-of/1' @ ( '2d.arc-shape/1' @ ( '2d.arc/3' @ V_c @ V_p @ V_q ) ) ) ) ) )).

thf('2d.def_length_of_major_arc_by_three_points_axiom',axiom,(
    ! [V_q: '2d.Point',V_p: '2d.Point',V_c: '2d.Point'] :
      ( ( '2d.arc-type/1' @ ( '2d.arc/3' @ V_c @ V_p @ V_q ) )
     => ( ( '2d.length-of/1' @ ( '2d.major-arc/1' @ ( '2d.arc/3' @ V_c @ V_p @ V_q ) ) )
        = ( '2d.length-of/1' @ ( '2d.arc-shape/1' @ ( '2d.major-arc/1' @ ( '2d.arc/3' @ V_c @ V_p @ V_q ) ) ) ) ) ) )).

thf('2d.def_length_of_minor_arc_by_three_points_axiom',axiom,(
    ! [V_q: '2d.Point',V_p: '2d.Point',V_c: '2d.Point'] :
      ( ( '2d.arc-type/1' @ ( '2d.arc/3' @ V_c @ V_p @ V_q ) )
     => ( ( '2d.length-of/1' @ ( '2d.minor-arc/1' @ ( '2d.arc/3' @ V_c @ V_p @ V_q ) ) )
        = ( '2d.length-of/1' @ ( '2d.arc-shape/1' @ ( '2d.minor-arc/1' @ ( '2d.arc/3' @ V_c @ V_p @ V_q ) ) ) ) ) ) )).

thf('2d.def_area_of_arc_by_three_points_axiom',axiom,(
    ! [V_q: '2d.Point',V_p: '2d.Point',V_c: '2d.Point'] :
      ( ( '2d.arc-type/1' @ ( '2d.arc/3' @ V_c @ V_p @ V_q ) )
     => ( ( '2d.area-of/1' @ ( '2d.arc/3' @ V_c @ V_p @ V_q ) )
        = ( '2d.area-of/1' @ ( '2d.arc-shape/1' @ ( '2d.arc/3' @ V_c @ V_p @ V_q ) ) ) ) ) )).

thf('2d.def_area_of_major_arc_by_three_points_axiom',axiom,(
    ! [V_q: '2d.Point',V_p: '2d.Point',V_c: '2d.Point'] :
      ( ( '2d.arc-type/1' @ ( '2d.arc/3' @ V_c @ V_p @ V_q ) )
     => ( ( '2d.area-of/1' @ ( '2d.major-arc/1' @ ( '2d.arc/3' @ V_c @ V_p @ V_q ) ) )
        = ( '2d.area-of/1' @ ( '2d.arc-shape/1' @ ( '2d.major-arc/1' @ ( '2d.arc/3' @ V_c @ V_p @ V_q ) ) ) ) ) ) )).

thf('2d.def_area_of_minor_arc_by_three_points_axiom',axiom,(
    ! [V_q: '2d.Point',V_p: '2d.Point',V_c: '2d.Point'] :
      ( ( '2d.arc-type/1' @ ( '2d.arc/3' @ V_c @ V_p @ V_q ) )
     => ( ( '2d.area-of/1' @ ( '2d.minor-arc/1' @ ( '2d.arc/3' @ V_c @ V_p @ V_q ) ) )
        = ( '2d.area-of/1' @ ( '2d.arc-shape/1' @ ( '2d.minor-arc/1' @ ( '2d.arc/3' @ V_c @ V_p @ V_q ) ) ) ) ) ) )).

thf('2d.def_radius_of_arc_shape_axiom',axiom,(
    ! [V_arc: '2d.Shape'] :
      ( ( '2d.radius-of/1' @ ( '2d.arc-shape/1' @ V_arc ) )
      = ( '2d.distance/2' @ ( '2d.center-of/1' @ V_arc ) @ ( '2d.arc-ini-point/1' @ V_arc ) ) ) )).

thf('2d.def_length_of_arc_shape_axiom',axiom,(
    ! [V_arc: '2d.Shape'] :
      ( ( '2d.length-of/1' @ ( '2d.arc-shape/1' @ V_arc ) )
      = ( $product @ ( '2d.radius-of/1' @ V_arc ) @ ( '2d.arc-central-angle/1' @ V_arc ) ) ) )).

thf('2d.def_area_of_arc_shape_axiom',axiom,(
    ! [V_arc: '2d.Shape'] :
      ( ( '2d.area-of/1' @ ( '2d.arc-shape/1' @ V_arc ) )
      = ( $product @ ( '^/2' @ ( '2d.radius-of/1' @ V_arc ) @ 2.0 ) @ ( $quotient @ ( '2d.arc-central-angle/1' @ V_arc ) @ 2.0 ) ) ) )).

thf('2d.def_is_arc_node_axiom',axiom,(
    ! [V_p: '2d.Point',V_A: '2d.Shape'] :
      ( ( '2d.is-arc-node/2' @ V_p @ V_A )
    <=> ( ( V_p
          = ( '2d.arc-ini-point/1' @ V_A ) )
        | ( V_p
          = ( '2d.arc-end-point/1' @ V_A ) ) ) ) )).

thf('2d.def_chord_of_arc_axiom',axiom,(
    ! [V_x: '2d.Shape'] :
      ( ( '2d.chord-of-arc/1' @ V_x )
      = ( '2d.seg/2' @ ( '2d.arc-ini-point/1' @ V_x ) @ ( '2d.arc-end-point/1' @ V_x ) ) ) )).

thf('2d.def_arc_inscribed_angle_axiom',axiom,(
    ! [V_x: '2d.Shape'] :
      ( ( '2d.arc-inscribed-angle/1' @ V_x )
      = ( $quotient @ ( '2d.arc-central-angle/1' @ V_x ) @ 2.0 ) ) )).

thf('2d.def_is_circular_sector_node_axiom',axiom,(
    ! [V_p: '2d.Point',V_A: '2d.Shape'] :
      ( ( '2d.is-circular-sector-node/2' @ V_p @ V_A )
    <=> ( ( V_p
          = ( '2d.circular-sector-ini-point/1' @ V_A ) )
        | ( V_p
          = ( '2d.circular-sector-end-point/1' @ V_A ) ) ) ) )).

thf('2d.def_chord_of_circular_sector_axiom',axiom,(
    ! [V_x: '2d.Shape'] :
      ( ( '2d.chord-of-circular-sector/1' @ V_x )
      = ( '2d.seg/2' @ ( '2d.circular-sector-ini-point/1' @ V_x ) @ ( '2d.circular-sector-end-point/1' @ V_x ) ) ) )).

thf('2d.def_circular_sector_inscribed_angle_axiom',axiom,(
    ! [V_x: '2d.Shape'] :
      ( ( '2d.circular-sector-inscribed-angle/1' @ V_x )
      = ( $quotient @ ( '2d.circular-sector-central-angle/1' @ V_x ) @ 2.0 ) ) )).

thf('2d.def_sides_of_circular_sector_axiom',axiom,(
    ! [V_s: '2d.Shape'] :
      ( ( '2d.sides-of/1' @ ( '2d.circular-sector-shape/1' @ V_s ) )
      = ( 'cons/2' @ '2d.Shape' @ ( '2d.arc-of/1' @ V_s ) @ ( 'cons/2' @ '2d.Shape' @ ( '2d.seg/2' @ ( '2d.center-of/1' @ V_s ) @ ( '2d.circular-sector-ini-point/1' @ V_s ) ) @ ( 'cons/2' @ '2d.Shape' @ ( '2d.seg/2' @ ( '2d.center-of/1' @ V_s ) @ ( '2d.circular-sector-end-point/1' @ V_s ) ) @ ( 'nil/0' @ '2d.Shape' ) ) ) ) ) )).

thf('2d.def_is_empty_axiom',axiom,(
    ! [V_shape: '2d.Shape'] :
      ( ( '2d.is-empty/1' @ V_shape )
    <=> ! [V_p: '2d.Point'] :
          ~ ( '2d.on/2' @ V_p @ V_shape ) ) )).

thf('2d.def_complement_axiom',axiom,(
    ! [V_shape: '2d.Shape'] :
      ( ( '2d.complement/1' @ V_shape )
      = ( '2d.shape-of-cpfun/1'
        @ ^ [V_p: '2d.Point'] :
            ~ ( '2d.on/2' @ V_p @ V_shape ) ) ) )).

thf('2d.def_shape-_axiom',axiom,(
    ! [V_A: '2d.Shape',V_B: '2d.Shape'] :
      ( ( '2d.shape-/2' @ V_A @ V_B )
      = ( '2d.intersection/2' @ V_A @ ( '2d.complement/1' @ V_B ) ) ) )).

thf('2d.def_set_as_shape_axiom',axiom,(
    ! [V_cfun: ( '2d.Point' > $o )] :
      ( ( '2d.set-as-shape/1' @ ( 'set-by-def/1' @ '2d.Point' @ V_cfun ) )
      = ( '2d.shape-of-cpfun/1'
        @ ^ [V_p: '2d.Point'] :
            ( V_cfun @ V_p ) ) ) )).

thf('2d.def_shape_as_set_axiom',axiom,(
    ! [V_shape: '2d.Shape'] :
      ( ( '2d.shape-as-set/1' @ V_shape )
      = ( 'set-by-def/1' @ '2d.Point'
        @ ^ [V_p: '2d.Point'] :
            ( '2d.on/2' @ V_p @ V_shape ) ) ) )).

thf('2d.shape-common-operation/1_type',type,(
    '2d.shape-common-operation/1': '2d.Shape' > '2d.Shape' )).

thf('2d.def_point_on_common_shape_axiom',axiom,(
    ! [V_p: '2d.Point',V_shape: '2d.Shape'] :
      ( ( '2d.on/2' @ V_p @ ( '2d.shape-common-operation/1' @ V_shape ) )
    <=> ( '2d.char-fun-of/1' @ V_shape @ V_p ) ) )).

thf('2d.def_point_on_inner_part_of_axiom',axiom,(
    ! [V_p: '2d.Point',V_shape: '2d.Shape'] :
      ( ( '2d.on/2' @ V_p @ ( '2d.inner-part-of/1' @ V_shape ) )
    <=> ( '2d.on/2' @ V_p @ ( '2d.shape-common-operation/1' @ ( '2d.inner-part-of/1' @ V_shape ) ) ) ) )).

thf('2d.def_point_on_with_boundary_axiom',axiom,(
    ! [V_p: '2d.Point',V_shape: '2d.Shape'] :
      ( ( '2d.on/2' @ V_p @ ( '2d.with-boundary/1' @ V_shape ) )
    <=> ( '2d.on/2' @ V_p @ ( '2d.shape-common-operation/1' @ ( '2d.with-boundary/1' @ V_shape ) ) ) ) )).

thf('2d.def_point_on_boundary_of_axiom',axiom,(
    ! [V_p: '2d.Point',V_shape: '2d.Shape'] :
      ( ( '2d.on/2' @ V_p @ ( '2d.boundary-of/1' @ V_shape ) )
    <=> ( '2d.on/2' @ V_p @ ( '2d.shape-common-operation/1' @ ( '2d.boundary-of/1' @ V_shape ) ) ) ) )).

thf('2d.def_point_on_segment_axiom',axiom,(
    ! [V_b: '2d.Point',V_a: '2d.Point',V_p: '2d.Point'] :
      ( ( '2d.segment-type/1' @ ( '2d.seg/2' @ V_a @ V_b ) )
     => ( ( '2d.on/2' @ V_p @ ( '2d.seg/2' @ V_a @ V_b ) )
      <=> ( '2d.on/2' @ V_p @ ( '2d.shape-common-operation/1' @ ( '2d.seg/2' @ V_a @ V_b ) ) ) ) ) )).

thf('2d.def_point_on_line_axiom',axiom,(
    ! [V_b: '2d.Point',V_a: '2d.Point',V_p: '2d.Point'] :
      ( ( '2d.line-type/1' @ ( '2d.line/2' @ V_a @ V_b ) )
     => ( ( '2d.on/2' @ V_p @ ( '2d.line/2' @ V_a @ V_b ) )
      <=> ( '2d.colinear/3' @ V_p @ V_a @ V_b ) ) ) )).

thf('2d.def_point_on_half_line_axiom',axiom,(
    ! [V_R: '2d.Point',V_Q: '2d.Point',V_P: '2d.Point'] :
      ( ( '2d.half-line-type/1' @ ( '2d.half-line/2' @ V_Q @ V_R ) )
     => ( ( '2d.on/2' @ V_P @ ( '2d.half-line/2' @ V_Q @ V_R ) )
      <=> ( '2d.on/2' @ V_P @ ( '2d.shape-common-operation/1' @ ( '2d.half-line/2' @ V_Q @ V_R ) ) ) ) ) )).

thf('2d.def_point_on_triangle_axiom',axiom,(
    ! [V_R: '2d.Point',V_Q: '2d.Point',V_P: '2d.Point',V_p: '2d.Point'] :
      ( ( '2d.triangle-type/1' @ ( '2d.triangle/3' @ V_P @ V_Q @ V_R ) )
     => ( ( '2d.on/2' @ V_p @ ( '2d.triangle/3' @ V_P @ V_Q @ V_R ) )
      <=> ( '2d.on/2' @ V_p @ ( '2d.shape-common-operation/1' @ ( '2d.triangle/3' @ V_P @ V_Q @ V_R ) ) ) ) ) )).

thf('2d.def_point_on_square_axiom',axiom,(
    ! [V_S: '2d.Point',V_R: '2d.Point',V_Q: '2d.Point',V_P: '2d.Point',V_p: '2d.Point'] :
      ( ( '2d.square-type/1' @ ( '2d.square/4' @ V_P @ V_Q @ V_R @ V_S ) )
     => ( ( '2d.on/2' @ V_p @ ( '2d.square/4' @ V_P @ V_Q @ V_R @ V_S ) )
      <=> ( '2d.on/2' @ V_p @ ( '2d.shape-common-operation/1' @ ( '2d.square/4' @ V_P @ V_Q @ V_R @ V_S ) ) ) ) ) )).

thf('2d.def_point_on_polygon_axiom',axiom,(
    ! [V_vertices: ( 'ListOf' @ '2d.Point' ),V_p: '2d.Point'] :
      ( ( '2d.polygon-type/1' @ ( '2d.polygon/1' @ V_vertices ) )
     => ( ( '2d.on/2' @ V_p @ ( '2d.polygon/1' @ V_vertices ) )
      <=> ( '2d.on/2' @ V_p @ ( '2d.shape-common-operation/1' @ ( '2d.polygon/1' @ V_vertices ) ) ) ) ) )).

thf('2d.def_point_on_circle_axiom',axiom,(
    ! [V_p: '2d.Point',V_s: '2d.Shape'] :
      ( ( '2d.on/2' @ V_p @ ( '2d.circle-shape/1' @ V_s ) )
    <=> ( '2d.on/2' @ V_p @ ( '2d.shape-common-operation/1' @ ( '2d.circle-shape/1' @ V_s ) ) ) ) )).

thf('2d.def_point_on_disk_axiom',axiom,(
    ! [V_p: '2d.Point',V_s: '2d.Shape'] :
      ( ( '2d.on/2' @ V_p @ ( '2d.disk-shape/1' @ V_s ) )
    <=> ( '2d.on/2' @ V_p @ ( '2d.shape-common-operation/1' @ ( '2d.disk-shape/1' @ V_s ) ) ) ) )).

thf('2d.def_point_on_arc_shape_axiom',axiom,(
    ! [V_p: '2d.Point',V_s: '2d.Shape'] :
      ( ( '2d.on/2' @ V_p @ ( '2d.arc-shape/1' @ V_s ) )
    <=> ( '2d.on/2' @ V_p @ ( '2d.shape-common-operation/1' @ ( '2d.arc-shape/1' @ V_s ) ) ) ) )).

thf('2d.def_point_on_arc_by_three_points_axiom',axiom,(
    ! [V_b: '2d.Point',V_a: '2d.Point',V_c: '2d.Point',V_p: '2d.Point'] :
      ( ( '2d.arc-type/1' @ ( '2d.arc/3' @ V_c @ V_a @ V_b ) )
     => ( ( '2d.on/2' @ V_p @ ( '2d.arc/3' @ V_c @ V_a @ V_b ) )
      <=> ( '2d.on/2' @ V_p @ ( '2d.arc-shape/1' @ ( '2d.arc/3' @ V_c @ V_a @ V_b ) ) ) ) ) )).

thf('2d.def_point_on_major_arc_by_three_points_axiom',axiom,(
    ! [V_b: '2d.Point',V_a: '2d.Point',V_c: '2d.Point',V_p: '2d.Point'] :
      ( ( '2d.arc-type/1' @ ( '2d.arc/3' @ V_c @ V_a @ V_b ) )
     => ( ( '2d.on/2' @ V_p @ ( '2d.major-arc/1' @ ( '2d.arc/3' @ V_c @ V_a @ V_b ) ) )
      <=> ( '2d.on/2' @ V_p @ ( '2d.arc-shape/1' @ ( '2d.major-arc/1' @ ( '2d.arc/3' @ V_c @ V_a @ V_b ) ) ) ) ) ) )).

thf('2d.def_point_on_minor_arc_by_three_points_axiom',axiom,(
    ! [V_b: '2d.Point',V_a: '2d.Point',V_c: '2d.Point',V_p: '2d.Point'] :
      ( ( '2d.arc-type/1' @ ( '2d.arc/3' @ V_c @ V_a @ V_b ) )
     => ( ( '2d.on/2' @ V_p @ ( '2d.minor-arc/1' @ ( '2d.arc/3' @ V_c @ V_a @ V_b ) ) )
      <=> ( '2d.on/2' @ V_p @ ( '2d.arc-shape/1' @ ( '2d.minor-arc/1' @ ( '2d.arc/3' @ V_c @ V_a @ V_b ) ) ) ) ) ) )).

thf('2d.def_point_on_circular_sector_axiom',axiom,(
    ! [V_p: '2d.Point',V_s: '2d.Shape'] :
      ( ( '2d.on/2' @ V_p @ ( '2d.circular-sector-shape/1' @ V_s ) )
    <=> ( '2d.on/2' @ V_p @ ( '2d.shape-common-operation/1' @ ( '2d.circular-sector-shape/1' @ V_s ) ) ) ) )).

thf('2d.def_on_divided_by_line_region_including_axiom',axiom,(
    ! [V_point: '2d.Point',V_q: '2d.Point',V_p: '2d.Point',V_P: '2d.Point'] :
      ( ( '2d.line-type/1' @ ( '2d.line/2' @ V_p @ V_q ) )
     => ( ( '2d.on/2' @ V_P @ ( '2d.divided-region-including/2' @ ( '2d.line/2' @ V_p @ V_q ) @ V_point ) )
      <=> ( '2d.on/2' @ V_P @ ( '2d.shape-common-operation/1' @ ( '2d.divided-region-including/2' @ ( '2d.line/2' @ V_p @ V_q ) @ V_point ) ) ) ) ) )).

thf('2d.def_on_shape_axiom',axiom,(
    ! [V_point: '2d.Point',V_cfun: ( '2d.Point' > $o )] :
      ( ( '2d.on/2' @ V_point @ ( '2d.shape-of-cpfun/1' @ V_cfun ) )
    <=> ( V_cfun @ V_point ) ) )).

thf('2d.def_point_inside_of_common_shape_axiom',axiom,(
    ! [V_p: '2d.Point',V_shape: '2d.Shape'] :
      ( ( '2d.point-inside-of/2' @ V_p @ ( '2d.shape-common-operation/1' @ V_shape ) )
    <=> ( '2d.on/2' @ V_p @ ( '2d.inner-part-of/1' @ V_shape ) ) ) )).

thf('2d.def_point_inside_of_triangle_axiom',axiom,(
    ! [V_R: '2d.Point',V_Q: '2d.Point',V_P: '2d.Point',V_p: '2d.Point'] :
      ( ( '2d.triangle-type/1' @ ( '2d.triangle/3' @ V_P @ V_Q @ V_R ) )
     => ( ( '2d.point-inside-of/2' @ V_p @ ( '2d.triangle/3' @ V_P @ V_Q @ V_R ) )
      <=> ( '2d.point-inside-of/2' @ V_p @ ( '2d.shape-common-operation/1' @ ( '2d.triangle/3' @ V_P @ V_Q @ V_R ) ) ) ) ) )).

thf('2d.def_point_inside_of_square_axiom',axiom,(
    ! [V_D: '2d.Point',V_C: '2d.Point',V_B: '2d.Point',V_A: '2d.Point',V_p: '2d.Point'] :
      ( ( '2d.square-type/1' @ ( '2d.square/4' @ V_A @ V_B @ V_C @ V_D ) )
     => ( ( '2d.point-inside-of/2' @ V_p @ ( '2d.square/4' @ V_A @ V_B @ V_C @ V_D ) )
      <=> ( '2d.point-inside-of/2' @ V_p @ ( '2d.shape-common-operation/1' @ ( '2d.square/4' @ V_A @ V_B @ V_C @ V_D ) ) ) ) ) )).

thf('2d.def_point_inside_of_polygon_axiom',axiom,(
    ! [V_vertices: ( 'ListOf' @ '2d.Point' ),V_p: '2d.Point'] :
      ( ( '2d.polygon-type/1' @ ( '2d.polygon/1' @ V_vertices ) )
     => ( ( '2d.point-inside-of/2' @ V_p @ ( '2d.polygon/1' @ V_vertices ) )
      <=> ( '2d.point-inside-of/2' @ V_p @ ( '2d.shape-common-operation/1' @ ( '2d.polygon/1' @ V_vertices ) ) ) ) ) )).

thf('2d.def_point_inside_of_divided_by_line_region_including_axiom',axiom,(
    ! [V_point: '2d.Point',V_q: '2d.Point',V_p: '2d.Point',V_P: '2d.Point'] :
      ( ( '2d.line-type/1' @ ( '2d.line/2' @ V_p @ V_q ) )
     => ( ( '2d.point-inside-of/2' @ V_P @ ( '2d.divided-region-including/2' @ ( '2d.line/2' @ V_p @ V_q ) @ V_point ) )
      <=> ( '2d.point-inside-of/2' @ V_P @ ( '2d.shape-common-operation/1' @ ( '2d.divided-region-including/2' @ ( '2d.line/2' @ V_p @ V_q ) @ V_point ) ) ) ) ) )).

thf('2d.def_point_inside_of_circle_axiom',axiom,(
    ! [V_p: '2d.Point',V_s: '2d.Shape'] :
      ( ( '2d.point-inside-of/2' @ V_p @ ( '2d.circle-shape/1' @ V_s ) )
    <=> ( '2d.point-inside-of/2' @ V_p @ ( '2d.shape-common-operation/1' @ ( '2d.circle-shape/1' @ V_s ) ) ) ) )).

thf('2d.def_point_inside_of_disk_axiom',axiom,(
    ! [V_p: '2d.Point',V_s: '2d.Shape'] :
      ( ( '2d.point-inside-of/2' @ V_p @ ( '2d.disk-shape/1' @ V_s ) )
    <=> ( '2d.point-inside-of/2' @ V_p @ ( '2d.shape-common-operation/1' @ ( '2d.disk-shape/1' @ V_s ) ) ) ) )).

thf('2d.def_point_inside_of_arc_axiom',axiom,(
    ! [V_p: '2d.Point',V_s: '2d.Shape'] :
      ( ( '2d.point-inside-of/2' @ V_p @ ( '2d.arc-shape/1' @ V_s ) )
    <=> ( '2d.point-inside-of/2' @ V_p @ ( '2d.shape-common-operation/1' @ ( '2d.arc-shape/1' @ V_s ) ) ) ) )).

thf('2d.def_point_inside_of_arc_by_three_points_axiom',axiom,(
    ! [V_b: '2d.Point',V_a: '2d.Point',V_c: '2d.Point',V_p: '2d.Point'] :
      ( ( '2d.arc-type/1' @ ( '2d.arc/3' @ V_c @ V_a @ V_b ) )
     => ( ( '2d.point-inside-of/2' @ V_p @ ( '2d.arc/3' @ V_c @ V_a @ V_b ) )
      <=> ( '2d.point-inside-of/2' @ V_p @ ( '2d.arc-shape/1' @ ( '2d.arc/3' @ V_c @ V_a @ V_b ) ) ) ) ) )).

thf('2d.def_point_inside_of_major_arc_by_three_points_axiom',axiom,(
    ! [V_b: '2d.Point',V_a: '2d.Point',V_c: '2d.Point',V_p: '2d.Point'] :
      ( ( '2d.arc-type/1' @ ( '2d.arc/3' @ V_c @ V_a @ V_b ) )
     => ( ( '2d.point-inside-of/2' @ V_p @ ( '2d.major-arc/1' @ ( '2d.arc/3' @ V_c @ V_a @ V_b ) ) )
      <=> ( '2d.point-inside-of/2' @ V_p @ ( '2d.arc-shape/1' @ ( '2d.major-arc/1' @ ( '2d.arc/3' @ V_c @ V_a @ V_b ) ) ) ) ) ) )).

thf('2d.def_point_inside_of_minor_arc_by_three_points_axiom',axiom,(
    ! [V_b: '2d.Point',V_a: '2d.Point',V_c: '2d.Point',V_p: '2d.Point'] :
      ( ( '2d.arc-type/1' @ ( '2d.arc/3' @ V_c @ V_a @ V_b ) )
     => ( ( '2d.point-inside-of/2' @ V_p @ ( '2d.minor-arc/1' @ ( '2d.arc/3' @ V_c @ V_a @ V_b ) ) )
      <=> ( '2d.point-inside-of/2' @ V_p @ ( '2d.arc-shape/1' @ ( '2d.minor-arc/1' @ ( '2d.arc/3' @ V_c @ V_a @ V_b ) ) ) ) ) ) )).

thf('2d.def_point_inside_of_circular_sector_axiom',axiom,(
    ! [V_p: '2d.Point',V_s: '2d.Shape'] :
      ( ( '2d.point-inside-of/2' @ V_p @ ( '2d.circular-sector-shape/1' @ V_s ) )
    <=> ( '2d.point-inside-of/2' @ V_p @ ( '2d.shape-common-operation/1' @ ( '2d.circular-sector-shape/1' @ V_s ) ) ) ) )).

thf('2d.def_point_on_intersection_axiom',axiom,(
    ! [V_P: '2d.Point',V_S0: '2d.Shape',V_S1: '2d.Shape'] :
      ( ( '2d.on/2' @ V_P @ ( '2d.intersection/2' @ V_S0 @ V_S1 ) )
    <=> ( ( '2d.on/2' @ V_P @ V_S0 )
        & ( '2d.on/2' @ V_P @ V_S1 ) ) ) )).

thf('2d.def_point_on_intersection_list_axiom',axiom,(
    ! [V_P: '2d.Point',V_Ss: ( 'ListOf' @ '2d.Shape' )] :
      ( ( '2d.on/2' @ V_P @ ( '2d.intersection/1' @ V_Ss ) )
    <=> ( 'all/2' @ '2d.Shape'
        @ ^ [V_s: '2d.Shape'] :
            ( '2d.on/2' @ V_P @ V_s )
        @ V_Ss ) ) )).

thf('2d.def_point_on_union_axiom',axiom,(
    ! [V_P: '2d.Point',V_S0: '2d.Shape',V_S1: '2d.Shape'] :
      ( ( '2d.on/2' @ V_P @ ( '2d.union/2' @ V_S0 @ V_S1 ) )
    <=> ( ( '2d.on/2' @ V_P @ V_S0 )
        | ( '2d.on/2' @ V_P @ V_S1 ) ) ) )).

thf('2d.def_point_on_union_list_axiom',axiom,(
    ! [V_P: '2d.Point',V_Ss: ( 'ListOf' @ '2d.Shape' )] :
      ( ( '2d.on/2' @ V_P @ ( '2d.union/1' @ V_Ss ) )
    <=> ( 'some/2' @ '2d.Shape'
        @ ^ [V_s: '2d.Shape'] :
            ( '2d.on/2' @ V_P @ V_s )
        @ V_Ss ) ) )).

thf('2d.def_seg_equality_axiom',axiom,(
    ! [V_s: '2d.Point',V_r: '2d.Point',V_q: '2d.Point',V_p: '2d.Point'] :
      ( ( ( '2d.segment-type/1' @ ( '2d.seg/2' @ V_p @ V_q ) )
        & ( '2d.segment-type/1' @ ( '2d.seg/2' @ V_r @ V_s ) ) )
     => ( ( ( '2d.seg/2' @ V_p @ V_q )
          = ( '2d.seg/2' @ V_r @ V_s ) )
      <=> ( ( ( V_p = V_r )
            & ( V_q = V_s ) )
          | ( ( V_p = V_s )
            & ( V_q = V_r ) ) ) ) ) )).

thf('2d.def_line_equality_axiom',axiom,(
    ! [V_s: '2d.Point',V_r: '2d.Point',V_q: '2d.Point',V_p: '2d.Point'] :
      ( ( ( '2d.line-type/1' @ ( '2d.line/2' @ V_p @ V_q ) )
        & ( '2d.line-type/1' @ ( '2d.line/2' @ V_r @ V_s ) ) )
     => ( ( ( '2d.line/2' @ V_p @ V_q )
          = ( '2d.line/2' @ V_r @ V_s ) )
      <=> ( ( '2d.colinear/3' @ V_p @ V_q @ V_r )
          & ( '2d.colinear/3' @ V_p @ V_q @ V_s ) ) ) ) )).

thf('2d.def_half_line_equality_axiom',axiom,(
    ! [V_s: '2d.Point',V_r: '2d.Point',V_q: '2d.Point',V_p: '2d.Point'] :
      ( ( ( '2d.half-line-type/1' @ ( '2d.half-line/2' @ V_p @ V_q ) )
        & ( '2d.half-line-type/1' @ ( '2d.half-line/2' @ V_r @ V_s ) ) )
     => ( ( ( '2d.half-line/2' @ V_p @ V_q )
          = ( '2d.half-line/2' @ V_r @ V_s ) )
      <=> ( ( V_p = V_r )
          & ( '2d.colinear/3' @ V_p @ V_q @ V_r )
          & ( '2d.colinear/3' @ V_p @ V_q @ V_s ) ) ) ) )).

thf('2d.def_square_equality_axiom',axiom,(
    ! [V_S1: '2d.Point',V_R1: '2d.Point',V_Q1: '2d.Point',V_P1: '2d.Point',V_S0: '2d.Point',V_R0: '2d.Point',V_Q0: '2d.Point',V_P0: '2d.Point'] :
      ( ( ( '2d.square-type/1' @ ( '2d.square/4' @ V_P0 @ V_Q0 @ V_R0 @ V_S0 ) )
        & ( '2d.square-type/1' @ ( '2d.square/4' @ V_P1 @ V_Q1 @ V_R1 @ V_S1 ) ) )
     => ( ( ( '2d.square/4' @ V_P0 @ V_Q0 @ V_R0 @ V_S0 )
          = ( '2d.square/4' @ V_P1 @ V_Q1 @ V_R1 @ V_S1 ) )
      <=> ( ( V_P0 = V_P1 )
          & ( V_Q0 = V_Q1 )
          & ( V_R0 = V_R1 )
          & ( V_S0 = V_S1 ) ) ) ) )).

thf('2d.def_shape_enclosed_by_eq_something_axiom',axiom,(
    ! [V_boundaries: ( 'ListOf' @ '2d.Shape' ),V_S: '2d.Shape'] :
      ( ( ( '2d.shape-enclosed-by/1' @ V_boundaries )
        = V_S )
    <=> ( ( '2d.shape-of-cpfun/1' @ ( '2d.char-fun-of/1' @ ( '2d.shape-enclosed-by/1' @ V_boundaries ) ) )
        = V_S ) ) )).

thf('2d.def_polygon_equality_axiom',axiom,(
    ! [V_vertices2: ( 'ListOf' @ '2d.Point' ),V_vertices1: ( 'ListOf' @ '2d.Point' )] :
      ( ( ( '2d.polygon-type/1' @ ( '2d.polygon/1' @ V_vertices1 ) )
        & ( '2d.polygon-type/1' @ ( '2d.polygon/1' @ V_vertices2 ) ) )
     => ( ( ( '2d.polygon/1' @ V_vertices1 )
          = ( '2d.polygon/1' @ V_vertices2 ) )
      <=> ( V_vertices1 = V_vertices2 ) ) ) )).

thf('2d.def_area_of_square_axiom',axiom,(
    ! [V_s: '2d.Point',V_r: '2d.Point',V_q: '2d.Point',V_p: '2d.Point'] :
      ( ( '2d.square-type/1' @ ( '2d.square/4' @ V_p @ V_q @ V_r @ V_s ) )
     => ( ( '2d.area-of/1' @ ( '2d.square/4' @ V_p @ V_q @ V_r @ V_s ) )
        = ( $sum @ ( '2d.area-of/1' @ ( '2d.triangle/3' @ V_p @ V_q @ V_r ) ) @ ( '2d.area-of/1' @ ( '2d.triangle/3' @ V_p @ V_r @ V_s ) ) ) ) ) )).

thf('2d.def_area_of_polygon_base_case_axiom',axiom,(
    ! [V_p2: '2d.Point',V_p1: '2d.Point',V_p0: '2d.Point'] :
      ( ( '2d.polygon-type/1' @ ( '2d.polygon/1' @ ( 'cons/2' @ '2d.Point' @ V_p0 @ ( 'cons/2' @ '2d.Point' @ V_p1 @ ( 'cons/2' @ '2d.Point' @ V_p2 @ ( 'nil/0' @ '2d.Point' ) ) ) ) ) )
     => ( ( '2d.area-of/1' @ ( '2d.polygon/1' @ ( 'cons/2' @ '2d.Point' @ V_p0 @ ( 'cons/2' @ '2d.Point' @ V_p1 @ ( 'cons/2' @ '2d.Point' @ V_p2 @ ( 'nil/0' @ '2d.Point' ) ) ) ) ) )
        = ( '2d.area-of/1' @ ( '2d.triangle/3' @ V_p0 @ V_p1 @ V_p2 ) ) ) ) )).

thf('2d.def_area_of_polygon_axiom',axiom,(
    ! [V_ps: ( 'ListOf' @ '2d.Point' ),V_p3: '2d.Point',V_p2: '2d.Point',V_p1: '2d.Point',V_p0: '2d.Point'] :
      ( ( '2d.polygon-type/1' @ ( '2d.polygon/1' @ ( 'cons/2' @ '2d.Point' @ V_p0 @ ( 'cons/2' @ '2d.Point' @ V_p1 @ ( 'cons/2' @ '2d.Point' @ V_p2 @ ( 'cons/2' @ '2d.Point' @ V_p3 @ V_ps ) ) ) ) ) )
     => ( ( '2d.area-of/1' @ ( '2d.polygon/1' @ ( 'cons/2' @ '2d.Point' @ V_p0 @ ( 'cons/2' @ '2d.Point' @ V_p1 @ ( 'cons/2' @ '2d.Point' @ V_p2 @ ( 'cons/2' @ '2d.Point' @ V_p3 @ V_ps ) ) ) ) ) )
        = ( $sum @ ( '2d.area-of/1' @ ( '2d.triangle/3' @ V_p0 @ V_p1 @ V_p2 ) ) @ ( '2d.area-of/1' @ ( '2d.polygon/1' @ ( 'cons/2' @ '2d.Point' @ V_p0 @ ( 'cons/2' @ '2d.Point' @ V_p2 @ ( 'cons/2' @ '2d.Point' @ V_p3 @ V_ps ) ) ) ) ) ) ) ) )).

thf('2d.def_intersect_obj_segment_axiom',axiom,(
    ! [V_r: '2d.Point',V_q: '2d.Point',V_p: '2d.Point',V_obj: '2d.Shape'] :
      ( ( '2d.segment-type/1' @ ( '2d.seg/2' @ V_p @ V_q ) )
     => ( ( '2d.intersect/3' @ V_obj @ ( '2d.seg/2' @ V_p @ V_q ) @ V_r )
      <=> ( ( '2d.on/2' @ V_r @ ( '2d.seg/2' @ V_p @ V_q ) )
          & ( '2d.on/2' @ V_r @ V_obj ) ) ) ) )).

thf('2d.def_intersect_obj_line_axiom',axiom,(
    ! [V_r: '2d.Point',V_q: '2d.Point',V_p: '2d.Point',V_obj: '2d.Shape'] :
      ( ( '2d.line-type/1' @ ( '2d.line/2' @ V_p @ V_q ) )
     => ( ( '2d.intersect/3' @ V_obj @ ( '2d.line/2' @ V_p @ V_q ) @ V_r )
      <=> ( ( '2d.on/2' @ V_r @ V_obj )
          & ( '2d.on/2' @ V_r @ ( '2d.line/2' @ V_p @ V_q ) ) ) ) ) )).

thf('2d.def_intersect_obj_half_line_axiom',axiom,(
    ! [V_r: '2d.Point',V_q: '2d.Point',V_p: '2d.Point',V_obj: '2d.Shape'] :
      ( ( '2d.half-line-type/1' @ ( '2d.half-line/2' @ V_p @ V_q ) )
     => ( ( '2d.intersect/3' @ V_obj @ ( '2d.half-line/2' @ V_p @ V_q ) @ V_r )
      <=> ( ( '2d.on/2' @ V_r @ V_obj )
          & ( '2d.on/2' @ V_r @ ( '2d.half-line/2' @ V_p @ V_q ) ) ) ) ) )).

thf('2d.def_intersect/2_line_line_axiom',axiom,(
    ! [V_q2: '2d.Point',V_q1: '2d.Point',V_p2: '2d.Point',V_p1: '2d.Point'] :
      ( ( ( '2d.line-type/1' @ ( '2d.line/2' @ V_p1 @ V_p2 ) )
        & ( '2d.line-type/1' @ ( '2d.line/2' @ V_q1 @ V_q2 ) ) )
     => ( ( '2d.intersect/2' @ ( '2d.line/2' @ V_p1 @ V_p2 ) @ ( '2d.line/2' @ V_q1 @ V_q2 ) )
      <=> ( ( '2d.coplanar/4' @ V_p1 @ V_p2 @ V_q1 @ V_q2 )
          & ~ ( '2d.parallel/2' @ ( '2d.line/2' @ V_p1 @ V_p2 ) @ ( '2d.line/2' @ V_q1 @ V_q2 ) ) ) ) ) )).

thf('2d.def_perpendicular_line_vs_line_axiom',axiom,(
    ! [V_s: '2d.Point',V_r: '2d.Point',V_q: '2d.Point',V_p: '2d.Point'] :
      ( ( ( '2d.line-type/1' @ ( '2d.line/2' @ V_p @ V_q ) )
        & ( '2d.line-type/1' @ ( '2d.line/2' @ V_r @ V_s ) ) )
     => ( ( '2d.perpendicular/2' @ ( '2d.line/2' @ V_p @ V_q ) @ ( '2d.line/2' @ V_r @ V_s ) )
      <=> ( 0.0
          = ( '2d.inner-prod/2' @ ( '2d.vec/2' @ V_p @ V_q ) @ ( '2d.vec/2' @ V_r @ V_s ) ) ) ) ) )).

thf('2d.def_perpendicular_seg_vs_seg_axiom',axiom,(
    ! [V_s: '2d.Point',V_r: '2d.Point',V_q: '2d.Point',V_p: '2d.Point'] :
      ( ( ( '2d.segment-type/1' @ ( '2d.seg/2' @ V_p @ V_q ) )
        & ( '2d.segment-type/1' @ ( '2d.seg/2' @ V_r @ V_s ) ) )
     => ( ( '2d.perpendicular/2' @ ( '2d.seg/2' @ V_p @ V_q ) @ ( '2d.seg/2' @ V_r @ V_s ) )
      <=> ( 0.0
          = ( '2d.inner-prod/2' @ ( '2d.vec/2' @ V_p @ V_q ) @ ( '2d.vec/2' @ V_r @ V_s ) ) ) ) ) )).

thf('2d.def_perpendicular_line_vs_seg_axiom',axiom,(
    ! [V_s: '2d.Point',V_r: '2d.Point',V_q: '2d.Point',V_p: '2d.Point'] :
      ( ( ( '2d.line-type/1' @ ( '2d.line/2' @ V_p @ V_q ) )
        & ( '2d.segment-type/1' @ ( '2d.seg/2' @ V_r @ V_s ) ) )
     => ( ( '2d.perpendicular/2' @ ( '2d.line/2' @ V_p @ V_q ) @ ( '2d.seg/2' @ V_r @ V_s ) )
      <=> ( 0.0
          = ( '2d.inner-prod/2' @ ( '2d.vec/2' @ V_p @ V_q ) @ ( '2d.vec/2' @ V_r @ V_s ) ) ) ) ) )).

thf('2d.def_perpendicular_seg_vs_line_axiom',axiom,(
    ! [V_s: '2d.Point',V_r: '2d.Point',V_q: '2d.Point',V_p: '2d.Point'] :
      ( ( ( '2d.segment-type/1' @ ( '2d.seg/2' @ V_p @ V_q ) )
        & ( '2d.line-type/1' @ ( '2d.line/2' @ V_r @ V_s ) ) )
     => ( ( '2d.perpendicular/2' @ ( '2d.seg/2' @ V_p @ V_q ) @ ( '2d.line/2' @ V_r @ V_s ) )
      <=> ( 0.0
          = ( '2d.inner-prod/2' @ ( '2d.vec/2' @ V_p @ V_q ) @ ( '2d.vec/2' @ V_r @ V_s ) ) ) ) ) )).

thf('2d.def_perpendicular_half_line_vs_half_line_axiom',axiom,(
    ! [V_s: '2d.Point',V_r: '2d.Point',V_q: '2d.Point',V_p: '2d.Point'] :
      ( ( ( '2d.half-line-type/1' @ ( '2d.half-line/2' @ V_p @ V_q ) )
        & ( '2d.half-line-type/1' @ ( '2d.half-line/2' @ V_r @ V_s ) ) )
     => ( ( '2d.perpendicular/2' @ ( '2d.half-line/2' @ V_p @ V_q ) @ ( '2d.half-line/2' @ V_r @ V_s ) )
      <=> ( 0.0
          = ( '2d.inner-prod/2' @ ( '2d.vec/2' @ V_p @ V_q ) @ ( '2d.vec/2' @ V_r @ V_s ) ) ) ) ) )).

thf('2d.def_perpendicular_half_line_vs_line_axiom',axiom,(
    ! [V_s: '2d.Point',V_r: '2d.Point',V_q: '2d.Point',V_p: '2d.Point'] :
      ( ( ( '2d.half-line-type/1' @ ( '2d.half-line/2' @ V_p @ V_q ) )
        & ( '2d.line-type/1' @ ( '2d.line/2' @ V_r @ V_s ) ) )
     => ( ( '2d.perpendicular/2' @ ( '2d.half-line/2' @ V_p @ V_q ) @ ( '2d.line/2' @ V_r @ V_s ) )
      <=> ( 0.0
          = ( '2d.inner-prod/2' @ ( '2d.vec/2' @ V_p @ V_q ) @ ( '2d.vec/2' @ V_r @ V_s ) ) ) ) ) )).

thf('2d.def_perpendicular_line_vs_half_line_axiom',axiom,(
    ! [V_s: '2d.Point',V_r: '2d.Point',V_q: '2d.Point',V_p: '2d.Point'] :
      ( ( ( '2d.line-type/1' @ ( '2d.line/2' @ V_p @ V_q ) )
        & ( '2d.half-line-type/1' @ ( '2d.half-line/2' @ V_r @ V_s ) ) )
     => ( ( '2d.perpendicular/2' @ ( '2d.line/2' @ V_p @ V_q ) @ ( '2d.half-line/2' @ V_r @ V_s ) )
      <=> ( 0.0
          = ( '2d.inner-prod/2' @ ( '2d.vec/2' @ V_p @ V_q ) @ ( '2d.vec/2' @ V_r @ V_s ) ) ) ) ) )).

thf('2d.def_perpendicular_half_line_vs_seg_axiom',axiom,(
    ! [V_s: '2d.Point',V_r: '2d.Point',V_q: '2d.Point',V_p: '2d.Point'] :
      ( ( ( '2d.half-line-type/1' @ ( '2d.half-line/2' @ V_p @ V_q ) )
        & ( '2d.segment-type/1' @ ( '2d.seg/2' @ V_r @ V_s ) ) )
     => ( ( '2d.perpendicular/2' @ ( '2d.half-line/2' @ V_p @ V_q ) @ ( '2d.seg/2' @ V_r @ V_s ) )
      <=> ( 0.0
          = ( '2d.inner-prod/2' @ ( '2d.vec/2' @ V_p @ V_q ) @ ( '2d.vec/2' @ V_r @ V_s ) ) ) ) ) )).

thf('2d.def_perpendicular_seg_vs_half_line_axiom',axiom,(
    ! [V_s: '2d.Point',V_r: '2d.Point',V_q: '2d.Point',V_p: '2d.Point'] :
      ( ( ( '2d.segment-type/1' @ ( '2d.seg/2' @ V_p @ V_q ) )
        & ( '2d.half-line-type/1' @ ( '2d.half-line/2' @ V_r @ V_s ) ) )
     => ( ( '2d.perpendicular/2' @ ( '2d.seg/2' @ V_p @ V_q ) @ ( '2d.half-line/2' @ V_r @ V_s ) )
      <=> ( 0.0
          = ( '2d.inner-prod/2' @ ( '2d.vec/2' @ V_p @ V_q ) @ ( '2d.vec/2' @ V_r @ V_s ) ) ) ) ) )).

thf('2d.def_length_of_segment_axiom',axiom,(
    ! [V_Q: '2d.Point',V_P: '2d.Point'] :
      ( ( '2d.segment-type/1' @ ( '2d.seg/2' @ V_P @ V_Q ) )
     => ( ( '2d.length-of/1' @ ( '2d.seg/2' @ V_P @ V_Q ) )
        = ( '2d.distance/2' @ V_P @ V_Q ) ) ) )).

thf('2d.def-perimeter-of-triangle_axiom',axiom,(
    ! [V_R: '2d.Point',V_Q: '2d.Point',V_P: '2d.Point'] :
      ( ( '2d.triangle-type/1' @ ( '2d.triangle/3' @ V_P @ V_Q @ V_R ) )
     => ( ( '2d.length-of/1' @ ( '2d.triangle/3' @ V_P @ V_Q @ V_R ) )
        = ( $sum @ ( '2d.distance/2' @ V_P @ V_Q ) @ ( $sum @ ( '2d.distance/2' @ V_Q @ V_R ) @ ( '2d.distance/2' @ V_R @ V_P ) ) ) ) ) )).

thf('2d.def-perimeter-of-square_axiom',axiom,(
    ! [V_S: '2d.Point',V_R: '2d.Point',V_Q: '2d.Point',V_P: '2d.Point'] :
      ( ( '2d.square-type/1' @ ( '2d.square/4' @ V_P @ V_Q @ V_R @ V_S ) )
     => ( ( '2d.length-of/1' @ ( '2d.square/4' @ V_P @ V_Q @ V_R @ V_S ) )
        = ( $sum @ ( '2d.distance/2' @ V_P @ V_Q ) @ ( $sum @ ( '2d.distance/2' @ V_Q @ V_R ) @ ( $sum @ ( '2d.distance/2' @ V_R @ V_S ) @ ( '2d.distance/2' @ V_S @ V_P ) ) ) ) ) ) )).

thf('2d.def-perimeter-of-polygon_axiom',axiom,(
    ! [V_Ps: ( 'ListOf' @ '2d.Point' )] :
      ( ( '2d.polygon-type/1' @ ( '2d.polygon/1' @ V_Ps ) )
     => ( ( '2d.length-of/1' @ ( '2d.polygon/1' @ V_Ps ) )
        = ( 'sum/1'
          @ ( 'zip-with/3' @ '2d.Point' @ '2d.Point' @ $real
            @ ^ [V_p1: '2d.Point',V_p2: '2d.Point'] :
                ( '2d.distance/2' @ V_p1 @ V_p2 )
            @ V_Ps
            @ ( 'cons/2' @ '2d.Point' @ ( 'last/1' @ '2d.Point' @ V_Ps ) @ V_Ps ) ) ) ) ) )).

thf('2d.def_midpoint_of_axiom',axiom,(
    ! [V_P1: '2d.Point',V_P2: '2d.Point'] :
      ( ( '2d.midpoint-of/2' @ V_P1 @ V_P2 )
      = ( '2d.vec->point/1' @ ( '2d.sv*/2' @ ( $quotient @ 1.0 @ 2.0 ) @ ( '2d.v+/2' @ ( '2d.vec/2' @ '2d.origin/0' @ V_P1 ) @ ( '2d.vec/2' @ '2d.origin/0' @ V_P2 ) ) ) ) ) )).

thf('2d.def_internally_dividing_point_axiom',axiom,(
    ! [V_P1: '2d.Point',V_P2: '2d.Point',V_r: $real] :
      ( ( '2d.internally-dividing-point/3' @ V_P1 @ V_P2 @ V_r )
      = ( '2d.vec->point/1' @ ( '2d.v+/2' @ ( '2d.sv*/2' @ ( $difference @ 1.0 @ V_r ) @ ( '2d.vec/2' @ '2d.origin/0' @ V_P1 ) ) @ ( '2d.sv*/2' @ V_r @ ( '2d.vec/2' @ '2d.origin/0' @ V_P2 ) ) ) ) ) )).

thf('2d.def_point_symmetry_axiom',axiom,(
    ! [V_P1: '2d.Point',V_P2: '2d.Point',V_C: '2d.Point'] :
      ( ( '2d.point-symmetry/3' @ V_P1 @ V_P2 @ V_C )
    <=> ( V_C
        = ( '2d.midpoint-of/2' @ V_P1 @ V_P2 ) ) ) )).

thf('2d.def_point_symmetry_shape_axiom',axiom,(
    ! [V_G: '2d.Shape',V_C: '2d.Point'] :
      ( ( '2d.point-symmetry-shape/2' @ V_G @ V_C )
    <=> ! [V_P: '2d.Point'] :
          ( ( '2d.on/2' @ V_P @ V_G )
         => ? [V_Q: '2d.Point'] :
              ( ( '2d.on/2' @ V_Q @ V_G )
              & ( '2d.point-symmetry/3' @ V_P @ V_Q @ V_C ) ) ) ) )).

thf('2d.def_point_symmetry_shapes_axiom',axiom,(
    ! [V_G1: '2d.Shape',V_G2: '2d.Shape',V_C: '2d.Point'] :
      ( ( '2d.point-symmetry-shapes/3' @ V_G1 @ V_G2 @ V_C )
    <=> ( ! [V_P_dot_0: '2d.Point'] :
            ( ( '2d.on/2' @ V_P_dot_0 @ V_G1 )
           => ? [V_Q_dot_0: '2d.Point'] :
                ( ( '2d.on/2' @ V_Q_dot_0 @ V_G2 )
                & ( '2d.point-symmetry/3' @ V_P_dot_0 @ V_Q_dot_0 @ V_C ) ) )
        & ! [V_P: '2d.Point'] :
            ( ( '2d.on/2' @ V_P @ V_G2 )
           => ? [V_Q: '2d.Point'] :
                ( ( '2d.on/2' @ V_Q @ V_G1 )
                & ( '2d.point-symmetry/3' @ V_P @ V_Q @ V_C ) ) ) ) ) )).

thf('2d.def_line_symmetry_axiom',axiom,(
    ! [V_P1: '2d.Point',V_P2: '2d.Point',V_l: '2d.Shape'] :
      ( ( '2d.line-symmetry/3' @ V_P1 @ V_P2 @ V_l )
    <=> ( ( '2d.on/2' @ ( '2d.midpoint-of/2' @ V_P1 @ V_P2 ) @ V_l )
        & ( '2d.perpendicular/2' @ ( '2d.line/2' @ V_P1 @ V_P2 ) @ V_l ) ) ) )).

thf('2d.def_line_symmetry_shapes_line_and_line_axiom',axiom,(
    ! [V_q2: '2d.Point',V_p2: '2d.Point',V_q1: '2d.Point',V_p1: '2d.Point',V_q0: '2d.Point',V_p0: '2d.Point'] :
      ( ( ( '2d.line-type/1' @ ( '2d.line/2' @ V_p0 @ V_q0 ) )
        & ( '2d.line-type/1' @ ( '2d.line/2' @ V_p1 @ V_q1 ) )
        & ( '2d.line-type/1' @ ( '2d.line/2' @ V_p2 @ V_q2 ) ) )
     => ( ( '2d.line-symmetry-shapes/3' @ ( '2d.line/2' @ V_p0 @ V_q0 ) @ ( '2d.line/2' @ V_p1 @ V_q1 ) @ ( '2d.line/2' @ V_p2 @ V_q2 ) )
      <=> ? [V_P: '2d.Point',V_Q: '2d.Point'] :
            ( ( '2d.line-symmetry/3' @ V_p0 @ V_P @ ( '2d.line/2' @ V_p2 @ V_q2 ) )
            & ( '2d.line-symmetry/3' @ V_q0 @ V_Q @ ( '2d.line/2' @ V_p2 @ V_q2 ) )
            & ( '2d.on/2' @ V_P @ ( '2d.line/2' @ V_p1 @ V_q1 ) )
            & ( '2d.on/2' @ V_Q @ ( '2d.line/2' @ V_p1 @ V_q1 ) ) ) ) ) )).

thf('2d.def_line_symmetry_shapes_axiom',axiom,(
    ! [V_G1: '2d.Shape',V_G2: '2d.Shape',V_l: '2d.Shape'] :
      ( ( '2d.line-symmetry-shapes/3' @ V_G1 @ V_G2 @ V_l )
    <=> ( ( V_G1
          = ( '2d.shape-of-cpfun/1'
            @ ^ [V_P_dot_0: '2d.Point'] :
              ? [V_Q_dot_0: '2d.Point'] :
                ( ( '2d.on/2' @ V_Q_dot_0 @ V_G2 )
                & ( '2d.line-symmetry/3' @ V_P_dot_0 @ V_Q_dot_0 @ V_l ) ) ) )
        & ( V_G2
          = ( '2d.shape-of-cpfun/1'
            @ ^ [V_Q: '2d.Point'] :
              ? [V_P: '2d.Point'] :
                ( ( '2d.on/2' @ V_P @ V_G1 )
                & ( '2d.line-symmetry/3' @ V_P @ V_Q @ V_l ) ) ) ) ) ) )).

thf('2d.def-is-a-side-of-a-triangle_axiom',axiom,(
    ! [V_s: '2d.Shape',V_C: '2d.Point',V_B: '2d.Point',V_A: '2d.Point'] :
      ( ( '2d.triangle-type/1' @ ( '2d.triangle/3' @ V_A @ V_B @ V_C ) )
     => ( ( '2d.is-a-side-of/2' @ V_s @ ( '2d.triangle/3' @ V_A @ V_B @ V_C ) )
      <=> ( 'member/2' @ '2d.Shape' @ V_s @ ( 'cons/2' @ '2d.Shape' @ ( '2d.seg/2' @ V_A @ V_B ) @ ( 'cons/2' @ '2d.Shape' @ ( '2d.seg/2' @ V_B @ V_C ) @ ( 'cons/2' @ '2d.Shape' @ ( '2d.seg/2' @ V_C @ V_A ) @ ( 'nil/0' @ '2d.Shape' ) ) ) ) ) ) ) )).

thf('2d.def-are-the-sides-of-a-triangle_axiom',axiom,(
    ! [V_sides: ( 'ListOf' @ '2d.Shape' ),V_C: '2d.Point',V_B: '2d.Point',V_A: '2d.Point'] :
      ( ( '2d.triangle-type/1' @ ( '2d.triangle/3' @ V_A @ V_B @ V_C ) )
     => ( ( '2d.are-the-sides-of/2' @ V_sides @ ( '2d.triangle/3' @ V_A @ V_B @ V_C ) )
      <=> ( 'is-a-permutation-of/2' @ '2d.Shape' @ V_sides @ ( 'cons/2' @ '2d.Shape' @ ( '2d.seg/2' @ V_A @ V_B ) @ ( 'cons/2' @ '2d.Shape' @ ( '2d.seg/2' @ V_B @ V_C ) @ ( 'cons/2' @ '2d.Shape' @ ( '2d.seg/2' @ V_C @ V_A ) @ ( 'nil/0' @ '2d.Shape' ) ) ) ) ) ) ) )).

thf('2d.def-is-a-side-of-a-square_axiom',axiom,(
    ! [V_s: '2d.Shape',V_D: '2d.Point',V_C: '2d.Point',V_B: '2d.Point',V_A: '2d.Point'] :
      ( ( '2d.square-type/1' @ ( '2d.square/4' @ V_A @ V_B @ V_C @ V_D ) )
     => ( ( '2d.is-a-side-of/2' @ V_s @ ( '2d.square/4' @ V_A @ V_B @ V_C @ V_D ) )
      <=> ( 'member/2' @ '2d.Shape' @ V_s @ ( 'cons/2' @ '2d.Shape' @ ( '2d.seg/2' @ V_A @ V_B ) @ ( 'cons/2' @ '2d.Shape' @ ( '2d.seg/2' @ V_B @ V_C ) @ ( 'cons/2' @ '2d.Shape' @ ( '2d.seg/2' @ V_C @ V_D ) @ ( 'cons/2' @ '2d.Shape' @ ( '2d.seg/2' @ V_D @ V_A ) @ ( 'nil/0' @ '2d.Shape' ) ) ) ) ) ) ) ) )).

thf('2d.def-are-the-sides-of-a-square_axiom',axiom,(
    ! [V_sides: ( 'ListOf' @ '2d.Shape' ),V_D: '2d.Point',V_C: '2d.Point',V_B: '2d.Point',V_A: '2d.Point'] :
      ( ( '2d.square-type/1' @ ( '2d.square/4' @ V_A @ V_B @ V_C @ V_D ) )
     => ( ( '2d.are-the-sides-of/2' @ V_sides @ ( '2d.square/4' @ V_A @ V_B @ V_C @ V_D ) )
      <=> ( 'is-a-permutation-of/2' @ '2d.Shape' @ V_sides @ ( 'cons/2' @ '2d.Shape' @ ( '2d.seg/2' @ V_A @ V_B ) @ ( 'cons/2' @ '2d.Shape' @ ( '2d.seg/2' @ V_B @ V_C ) @ ( 'cons/2' @ '2d.Shape' @ ( '2d.seg/2' @ V_C @ V_D ) @ ( 'cons/2' @ '2d.Shape' @ ( '2d.seg/2' @ V_D @ V_A ) @ ( 'nil/0' @ '2d.Shape' ) ) ) ) ) ) ) ) )).

thf('2d.def-is-a-side-of-a-polygon_axiom',axiom,(
    ! [V_s: '2d.Shape',V_Ps: ( 'ListOf' @ '2d.Point' )] :
      ( ( '2d.polygon-type/1' @ ( '2d.polygon/1' @ V_Ps ) )
     => ( ( '2d.is-a-side-of/2' @ V_s @ ( '2d.polygon/1' @ V_Ps ) )
      <=> ( 'member/2' @ '2d.Shape' @ V_s
          @ ( 'zip-with/3' @ '2d.Point' @ '2d.Point' @ '2d.Shape'
            @ ^ [V_x: '2d.Point',V_y: '2d.Point'] :
                ( '2d.seg/2' @ V_x @ V_y )
            @ ( 'cons/2' @ '2d.Point' @ ( 'last/1' @ '2d.Point' @ V_Ps ) @ V_Ps )
            @ V_Ps ) ) ) ) )).

thf('2d.def-are-the-sides-of-a-polygon_axiom',axiom,(
    ! [V_sides: ( 'ListOf' @ '2d.Shape' ),V_Ps: ( 'ListOf' @ '2d.Point' )] :
      ( ( '2d.polygon-type/1' @ ( '2d.polygon/1' @ V_Ps ) )
     => ( ( '2d.are-the-sides-of/2' @ V_sides @ ( '2d.polygon/1' @ V_Ps ) )
      <=> ( 'is-a-permutation-of/2' @ '2d.Shape' @ V_sides
          @ ( 'zip-with/3' @ '2d.Point' @ '2d.Point' @ '2d.Shape'
            @ ^ [V_x: '2d.Point',V_y: '2d.Point'] :
                ( '2d.seg/2' @ V_x @ V_y )
            @ ( 'cons/2' @ '2d.Point' @ ( 'last/1' @ '2d.Point' @ V_Ps ) @ V_Ps )
            @ V_Ps ) ) ) ) )).

thf('2d.def-sides-of-triangle_axiom',axiom,(
    ! [V_C: '2d.Point',V_B: '2d.Point',V_A: '2d.Point'] :
      ( ( '2d.triangle-type/1' @ ( '2d.triangle/3' @ V_A @ V_B @ V_C ) )
     => ( ( '2d.sides-of/1' @ ( '2d.triangle/3' @ V_A @ V_B @ V_C ) )
        = ( 'cons/2' @ '2d.Shape' @ ( '2d.seg/2' @ V_A @ V_B ) @ ( 'cons/2' @ '2d.Shape' @ ( '2d.seg/2' @ V_B @ V_C ) @ ( 'cons/2' @ '2d.Shape' @ ( '2d.seg/2' @ V_C @ V_A ) @ ( 'nil/0' @ '2d.Shape' ) ) ) ) ) ) )).

thf('2d.def-sides-of-square_axiom',axiom,(
    ! [V_D: '2d.Point',V_C: '2d.Point',V_B: '2d.Point',V_A: '2d.Point'] :
      ( ( '2d.square-type/1' @ ( '2d.square/4' @ V_A @ V_B @ V_C @ V_D ) )
     => ( ( '2d.sides-of/1' @ ( '2d.square/4' @ V_A @ V_B @ V_C @ V_D ) )
        = ( 'cons/2' @ '2d.Shape' @ ( '2d.seg/2' @ V_A @ V_B ) @ ( 'cons/2' @ '2d.Shape' @ ( '2d.seg/2' @ V_B @ V_C ) @ ( 'cons/2' @ '2d.Shape' @ ( '2d.seg/2' @ V_C @ V_D ) @ ( 'cons/2' @ '2d.Shape' @ ( '2d.seg/2' @ V_D @ V_A ) @ ( 'nil/0' @ '2d.Shape' ) ) ) ) ) ) ) )).

thf('2d.def-sides-of-polygon_axiom',axiom,(
    ! [V_Ps: ( 'ListOf' @ '2d.Point' )] :
      ( ( '2d.polygon-type/1' @ ( '2d.polygon/1' @ V_Ps ) )
     => ( ( '2d.sides-of/1' @ ( '2d.polygon/1' @ V_Ps ) )
        = ( 'zip-with/3' @ '2d.Point' @ '2d.Point' @ '2d.Shape'
          @ ^ [V_x: '2d.Point',V_y: '2d.Point'] :
              ( '2d.seg/2' @ V_x @ V_y )
          @ ( 'cons/2' @ '2d.Point' @ ( 'last/1' @ '2d.Point' @ V_Ps ) @ V_Ps )
          @ V_Ps ) ) ) )).

thf('2d.def-is-interior-angle-of-a-triangle_axiom',axiom,(
    ! [V_C: '2d.Point',V_B: '2d.Point',V_A: '2d.Point',V_a: $real] :
      ( ( '2d.triangle-type/1' @ ( '2d.triangle/3' @ V_A @ V_B @ V_C ) )
     => ( ( '2d.is-interior-angle-of/2' @ V_a @ ( '2d.triangle/3' @ V_A @ V_B @ V_C ) )
      <=> ( ( V_a
            = ( '2d.rad-of-angle/1' @ ( '2d.angle/3' @ V_A @ V_B @ V_C ) ) )
          | ( V_a
            = ( '2d.rad-of-angle/1' @ ( '2d.angle/3' @ V_B @ V_C @ V_A ) ) )
          | ( V_a
            = ( '2d.rad-of-angle/1' @ ( '2d.angle/3' @ V_C @ V_A @ V_B ) ) ) ) ) ) )).

thf('2d.def-are-interior-angles-of-a-triangle_axiom',axiom,(
    ! [V_C: '2d.Point',V_B: '2d.Point',V_A: '2d.Point',V_as: ( 'ListOf' @ $real )] :
      ( ( '2d.triangle-type/1' @ ( '2d.triangle/3' @ V_A @ V_B @ V_C ) )
     => ( ( '2d.are-interior-angles-of/2' @ V_as @ ( '2d.triangle/3' @ V_A @ V_B @ V_C ) )
      <=> ( 'is-a-permutation-of/2' @ $real @ V_as @ ( 'cons/2' @ $real @ ( '2d.rad-of-angle/1' @ ( '2d.angle/3' @ V_A @ V_B @ V_C ) ) @ ( 'cons/2' @ $real @ ( '2d.rad-of-angle/1' @ ( '2d.angle/3' @ V_B @ V_C @ V_A ) ) @ ( 'cons/2' @ $real @ ( '2d.rad-of-angle/1' @ ( '2d.angle/3' @ V_C @ V_A @ V_B ) ) @ ( 'nil/0' @ $real ) ) ) ) ) ) ) )).

thf('2d.def-lines-intersect-angle-line-line_axiom',axiom,(
    ! [V_a: $real,V_S: '2d.Point',V_R: '2d.Point',V_Q: '2d.Point',V_P: '2d.Point'] :
      ( ( ( '2d.line-type/1' @ ( '2d.line/2' @ V_P @ V_Q ) )
        & ( '2d.line-type/1' @ ( '2d.line/2' @ V_R @ V_S ) ) )
     => ( ( '2d.lines-intersect-angle/3' @ ( '2d.line/2' @ V_P @ V_Q ) @ ( '2d.line/2' @ V_R @ V_S ) @ V_a )
      <=> ( ( '2d.intersect/2' @ ( '2d.line/2' @ V_P @ V_Q ) @ ( '2d.line/2' @ V_R @ V_S ) )
          & ( $lesseq @ 0.0 @ ( 'cos/1' @ V_a ) )
          & ( ( '^/2' @ ( '2d.inner-prod/2' @ ( '2d.vec/2' @ V_P @ V_Q ) @ ( '2d.vec/2' @ V_R @ V_S ) ) @ 2.0 )
            = ( $product @ ( '2d.distance^2/2' @ V_P @ V_Q ) @ ( $product @ ( '2d.distance^2/2' @ V_R @ V_S ) @ ( '^/2' @ ( 'cos/1' @ V_a ) @ 2.0 ) ) ) ) ) ) ) )).

thf('2d.def-lines-intersect-angle-line-seg_axiom',axiom,(
    ! [V_a: $real,V_S: '2d.Point',V_R: '2d.Point',V_Q: '2d.Point',V_P: '2d.Point'] :
      ( ( ( '2d.line-type/1' @ ( '2d.line/2' @ V_P @ V_Q ) )
        & ( '2d.segment-type/1' @ ( '2d.seg/2' @ V_R @ V_S ) ) )
     => ( ( '2d.lines-intersect-angle/3' @ ( '2d.line/2' @ V_P @ V_Q ) @ ( '2d.seg/2' @ V_R @ V_S ) @ V_a )
      <=> ( '2d.lines-intersect-angle/3' @ ( '2d.line/2' @ V_P @ V_Q ) @ ( '2d.line/2' @ V_R @ V_S ) @ V_a ) ) ) )).

thf('2d.def-lines-intersect-angle-seg-line_axiom',axiom,(
    ! [V_a: $real,V_S: '2d.Point',V_R: '2d.Point',V_Q: '2d.Point',V_P: '2d.Point'] :
      ( ( ( '2d.segment-type/1' @ ( '2d.seg/2' @ V_P @ V_Q ) )
        & ( '2d.line-type/1' @ ( '2d.line/2' @ V_R @ V_S ) ) )
     => ( ( '2d.lines-intersect-angle/3' @ ( '2d.seg/2' @ V_P @ V_Q ) @ ( '2d.line/2' @ V_R @ V_S ) @ V_a )
      <=> ( '2d.lines-intersect-angle/3' @ ( '2d.line/2' @ V_P @ V_Q ) @ ( '2d.line/2' @ V_R @ V_S ) @ V_a ) ) ) )).

thf('2d.def-lines-intersect-angle-seg-seg_axiom',axiom,(
    ! [V_a: $real,V_S: '2d.Point',V_R: '2d.Point',V_Q: '2d.Point',V_P: '2d.Point'] :
      ( ( ( '2d.segment-type/1' @ ( '2d.seg/2' @ V_P @ V_Q ) )
        & ( '2d.segment-type/1' @ ( '2d.seg/2' @ V_R @ V_S ) ) )
     => ( ( '2d.lines-intersect-angle/3' @ ( '2d.seg/2' @ V_P @ V_Q ) @ ( '2d.seg/2' @ V_R @ V_S ) @ V_a )
      <=> ( '2d.lines-intersect-angle/3' @ ( '2d.line/2' @ V_P @ V_Q ) @ ( '2d.line/2' @ V_R @ V_S ) @ V_a ) ) ) )).

thf('2d.def-lines-intersect-angle-half-line-half-line_axiom',axiom,(
    ! [V_a: $real,V_S: '2d.Point',V_R: '2d.Point',V_Q: '2d.Point',V_P: '2d.Point'] :
      ( ( ( '2d.half-line-type/1' @ ( '2d.half-line/2' @ V_P @ V_Q ) )
        & ( '2d.half-line-type/1' @ ( '2d.half-line/2' @ V_R @ V_S ) ) )
     => ( ( '2d.lines-intersect-angle/3' @ ( '2d.half-line/2' @ V_P @ V_Q ) @ ( '2d.half-line/2' @ V_R @ V_S ) @ V_a )
      <=> ( '2d.lines-intersect-angle/3' @ ( '2d.line/2' @ V_P @ V_Q ) @ ( '2d.line/2' @ V_R @ V_S ) @ V_a ) ) ) )).

thf('2d.def-lines-intersect-angle-seg-half-line_axiom',axiom,(
    ! [V_a: $real,V_S: '2d.Point',V_R: '2d.Point',V_Q: '2d.Point',V_P: '2d.Point'] :
      ( ( ( '2d.segment-type/1' @ ( '2d.seg/2' @ V_P @ V_Q ) )
        & ( '2d.half-line-type/1' @ ( '2d.half-line/2' @ V_R @ V_S ) ) )
     => ( ( '2d.lines-intersect-angle/3' @ ( '2d.seg/2' @ V_P @ V_Q ) @ ( '2d.half-line/2' @ V_R @ V_S ) @ V_a )
      <=> ( '2d.lines-intersect-angle/3' @ ( '2d.line/2' @ V_P @ V_Q ) @ ( '2d.line/2' @ V_R @ V_S ) @ V_a ) ) ) )).

thf('2d.def-lines-intersect-angle-line-half-line_axiom',axiom,(
    ! [V_a: $real,V_S: '2d.Point',V_R: '2d.Point',V_Q: '2d.Point',V_P: '2d.Point'] :
      ( ( ( '2d.line-type/1' @ ( '2d.line/2' @ V_P @ V_Q ) )
        & ( '2d.half-line-type/1' @ ( '2d.half-line/2' @ V_R @ V_S ) ) )
     => ( ( '2d.lines-intersect-angle/3' @ ( '2d.line/2' @ V_P @ V_Q ) @ ( '2d.half-line/2' @ V_R @ V_S ) @ V_a )
      <=> ( '2d.lines-intersect-angle/3' @ ( '2d.line/2' @ V_P @ V_Q ) @ ( '2d.line/2' @ V_R @ V_S ) @ V_a ) ) ) )).

thf('2d.def-lines-intersect-angle-half-line-seg_axiom',axiom,(
    ! [V_a: $real,V_S: '2d.Point',V_R: '2d.Point',V_Q: '2d.Point',V_P: '2d.Point'] :
      ( ( ( '2d.half-line-type/1' @ ( '2d.half-line/2' @ V_P @ V_Q ) )
        & ( '2d.segment-type/1' @ ( '2d.seg/2' @ V_R @ V_S ) ) )
     => ( ( '2d.lines-intersect-angle/3' @ ( '2d.half-line/2' @ V_P @ V_Q ) @ ( '2d.seg/2' @ V_R @ V_S ) @ V_a )
      <=> ( '2d.lines-intersect-angle/3' @ ( '2d.line/2' @ V_P @ V_Q ) @ ( '2d.line/2' @ V_R @ V_S ) @ V_a ) ) ) )).

thf('2d.def-lines-intersect-angle-half-line-line_axiom',axiom,(
    ! [V_a: $real,V_S: '2d.Point',V_R: '2d.Point',V_Q: '2d.Point',V_P: '2d.Point'] :
      ( ( ( '2d.half-line-type/1' @ ( '2d.half-line/2' @ V_P @ V_Q ) )
        & ( '2d.line-type/1' @ ( '2d.line/2' @ V_R @ V_S ) ) )
     => ( ( '2d.lines-intersect-angle/3' @ ( '2d.half-line/2' @ V_P @ V_Q ) @ ( '2d.line/2' @ V_R @ V_S ) @ V_a )
      <=> ( '2d.lines-intersect-angle/3' @ ( '2d.line/2' @ V_P @ V_Q ) @ ( '2d.line/2' @ V_R @ V_S ) @ V_a ) ) ) )).

thf('2d.def_shape_shape_distance_line_line_axiom',axiom,(
    ! [V_q2: '2d.Point',V_q1: '2d.Point',V_p2: '2d.Point',V_p1: '2d.Point'] :
      ( ( ( '2d.line-type/1' @ ( '2d.line/2' @ V_p1 @ V_p2 ) )
        & ( '2d.line-type/1' @ ( '2d.line/2' @ V_q1 @ V_q2 ) ) )
     => ( ( '2d.shape-shape-distance/2' @ ( '2d.line/2' @ V_p1 @ V_p2 ) @ ( '2d.line/2' @ V_q1 @ V_q2 ) )
        = ( '2d.line-line-distance/2' @ ( '2d.line/2' @ V_p1 @ V_p2 ) @ ( '2d.line/2' @ V_q1 @ V_q2 ) ) ) ) )).

thf('2d.def_shape_shape_square_distance_line_line_axiom',axiom,(
    ! [V_q2: '2d.Point',V_q1: '2d.Point',V_p2: '2d.Point',V_p1: '2d.Point'] :
      ( ( ( '2d.line-type/1' @ ( '2d.line/2' @ V_p1 @ V_p2 ) )
        & ( '2d.line-type/1' @ ( '2d.line/2' @ V_q1 @ V_q2 ) ) )
     => ( ( '2d.shape-shape-distance^2/2' @ ( '2d.line/2' @ V_p1 @ V_p2 ) @ ( '2d.line/2' @ V_q1 @ V_q2 ) )
        = ( '2d.line-line-distance^2/2' @ ( '2d.line/2' @ V_p1 @ V_p2 ) @ ( '2d.line/2' @ V_q1 @ V_q2 ) ) ) ) )).

thf('2d.def-base-of-isosceles-triangle_axiom',axiom,(
    ! [V_R: '2d.Point',V_Q: '2d.Point',V_P: '2d.Point',V_base: '2d.Shape'] :
      ( ( '2d.triangle-type/1' @ ( '2d.triangle/3' @ V_P @ V_Q @ V_R ) )
     => ( ( '2d.is-base-of/2' @ V_base @ ( '2d.triangle/3' @ V_P @ V_Q @ V_R ) )
      <=> ( ( ( V_base
              = ( '2d.seg/2' @ V_P @ V_Q ) )
            & ( ( '2d.distance^2/2' @ V_P @ V_R )
              = ( '2d.distance^2/2' @ V_Q @ V_R ) ) )
          | ( ( V_base
              = ( '2d.seg/2' @ V_Q @ V_R ) )
            & ( ( '2d.distance^2/2' @ V_Q @ V_P )
              = ( '2d.distance^2/2' @ V_R @ V_P ) ) )
          | ( ( V_base
              = ( '2d.seg/2' @ V_R @ V_P ) )
            & ( ( '2d.distance^2/2' @ V_R @ V_Q )
              = ( '2d.distance^2/2' @ V_P @ V_Q ) ) ) ) ) ) )).

thf('2d.def-is-opposite-wrt-line_axiom',axiom,(
    ! [V_S: '2d.Point',V_R: '2d.Point',V_Q: '2d.Point',V_P: '2d.Point'] :
      ( ( '2d.line-type/1' @ ( '2d.line/2' @ V_R @ V_S ) )
     => ( ( '2d.is-opposite-of-wrt/3' @ V_P @ V_Q @ ( '2d.line/2' @ V_R @ V_S ) )
      <=> ( '2d.intersect/2' @ ( '2d.seg/2' @ V_P @ V_Q ) @ ( '2d.line/2' @ V_R @ V_S ) ) ) ) )).

thf('2d.def-is-opposite-wrt-seg_axiom',axiom,(
    ! [V_S: '2d.Point',V_R: '2d.Point',V_Q: '2d.Point',V_P: '2d.Point'] :
      ( ( '2d.segment-type/1' @ ( '2d.seg/2' @ V_R @ V_S ) )
     => ( ( '2d.is-opposite-of-wrt/3' @ V_P @ V_Q @ ( '2d.seg/2' @ V_R @ V_S ) )
      <=> ( '2d.intersect/2' @ ( '2d.seg/2' @ V_P @ V_Q ) @ ( '2d.line/2' @ V_R @ V_S ) ) ) ) )).

thf('2d.def-foot-of-perpendicular-line-from-to-line_axiom',axiom,(
    ! [V_B: '2d.Point',V_A: '2d.Point',V_P: '2d.Point'] :
      ( ( '2d.line-type/1' @ ( '2d.line/2' @ V_A @ V_B ) )
     => ( ( '2d.foot-of-perpendicular-line-from-to/2' @ V_P @ ( '2d.line/2' @ V_A @ V_B ) )
        = ( '2d.vec->point/1' @ ( '2d.v+/2' @ ( '2d.sv*/2' @ ( $quotient @ ( '2d.inner-prod/2' @ ( '2d.vec/2' @ V_A @ V_B ) @ ( '2d.vec/2' @ V_P @ V_B ) ) @ ( '2d.distance^2/2' @ V_A @ V_B ) ) @ ( '2d.vec/2' @ '2d.origin/0' @ V_A ) ) @ ( '2d.sv*/2' @ ( $difference @ 1.0 @ ( $quotient @ ( '2d.inner-prod/2' @ ( '2d.vec/2' @ V_A @ V_B ) @ ( '2d.vec/2' @ V_P @ V_B ) ) @ ( '2d.distance^2/2' @ V_A @ V_B ) ) ) @ ( '2d.vec/2' @ '2d.origin/0' @ V_B ) ) ) ) ) ) )).

thf('2d.convex-polygon-common-operation/1_type',type,(
    '2d.convex-polygon-common-operation/1': '2d.Shape' > '2d.Shape' )).

thf('2d.def_char_fun_of_shape_of_cpfun_axiom',axiom,(
    ! [V_cpfun: ( '2d.Point' > $o )] :
      ( ( '2d.char-fun-of/1' @ ( '2d.shape-of-cpfun/1' @ V_cpfun ) )
      = V_cpfun ) )).

thf('2d.def_char_fun_of_union_axiom',axiom,(
    ! [V_s1: '2d.Shape',V_s2: '2d.Shape'] :
      ( ( '2d.char-fun-of/1' @ ( '2d.union/2' @ V_s1 @ V_s2 ) )
      = ( ^ [V_P: '2d.Point'] :
            ( ( '2d.char-fun-of/1' @ V_s1 @ V_P )
            | ( '2d.char-fun-of/1' @ V_s2 @ V_P ) ) ) ) )).

thf('2d.def_char_fun_of_union_list_axiom',axiom,(
    ! [V_shapelist: ( 'ListOf' @ '2d.Shape' )] :
      ( ( '2d.char-fun-of/1' @ ( '2d.union/1' @ V_shapelist ) )
      = ( ^ [V_P: '2d.Point'] :
            ( 'some/2' @ '2d.Shape'
            @ ^ [V_shape: '2d.Shape'] :
                ( '2d.char-fun-of/1' @ V_shape @ V_P )
            @ V_shapelist ) ) ) )).

thf('2d.def_char_fun_of_intersection_axiom',axiom,(
    ! [V_s1: '2d.Shape',V_s2: '2d.Shape'] :
      ( ( '2d.char-fun-of/1' @ ( '2d.intersection/2' @ V_s1 @ V_s2 ) )
      = ( ^ [V_P: '2d.Point'] :
            ( ( '2d.char-fun-of/1' @ V_s1 @ V_P )
            & ( '2d.char-fun-of/1' @ V_s2 @ V_P ) ) ) ) )).

thf('2d.def_char_fun_of_intersection_list_axiom',axiom,(
    ! [V_shapelist: ( 'ListOf' @ '2d.Shape' )] :
      ( ( '2d.char-fun-of/1' @ ( '2d.intersection/1' @ V_shapelist ) )
      = ( ^ [V_P: '2d.Point'] :
            ( 'all/2' @ '2d.Shape'
            @ ^ [V_shape: '2d.Shape'] :
                ( '2d.char-fun-of/1' @ V_shape @ V_P )
            @ V_shapelist ) ) ) )).

thf('2d.def_char_fun_of_line_axiom',axiom,(
    ! [V_b: '2d.Point',V_a: '2d.Point'] :
      ( ( '2d.line-type/1' @ ( '2d.line/2' @ V_a @ V_b ) )
     => ( ( '2d.char-fun-of/1' @ ( '2d.line/2' @ V_a @ V_b ) )
        = ( ^ [V_p: '2d.Point'] :
              ( '2d.colinear/3' @ V_p @ V_a @ V_b ) ) ) ) )).

thf('2d.def_char_fun_of_inside_of_half_line_axiom',axiom,(
    ! [V_b: '2d.Point',V_a: '2d.Point'] :
      ( ( '2d.half-line-type/1' @ ( '2d.half-line/2' @ V_a @ V_b ) )
     => ( ( '2d.char-fun-of/1' @ ( '2d.inner-part-of/1' @ ( '2d.half-line/2' @ V_a @ V_b ) ) )
        = ( ^ [V_p: '2d.Point'] :
              ( ( '2d.colinear/3' @ V_p @ V_a @ V_b )
              & ( $less @ 0.0 @ ( '2d.inner-prod/2' @ ( '2d.vec/2' @ V_a @ V_b ) @ ( '2d.vec/2' @ V_a @ V_p ) ) ) ) ) ) ) )).

thf('2d.def_char_fun_of_inside_of_segment_axiom',axiom,(
    ! [V_b: '2d.Point',V_a: '2d.Point'] :
      ( ( '2d.segment-type/1' @ ( '2d.seg/2' @ V_a @ V_b ) )
     => ( ( '2d.char-fun-of/1' @ ( '2d.inner-part-of/1' @ ( '2d.seg/2' @ V_a @ V_b ) ) )
        = ( ^ [V_p: '2d.Point'] :
              ( ( '2d.colinear/3' @ V_p @ V_a @ V_b )
              & ( $less @ 0.0 @ ( '2d.inner-prod/2' @ ( '2d.vec/2' @ V_a @ V_b ) @ ( '2d.vec/2' @ V_a @ V_p ) ) )
              & ( $less @ 0.0 @ ( '2d.inner-prod/2' @ ( '2d.vec/2' @ V_b @ V_a ) @ ( '2d.vec/2' @ V_b @ V_p ) ) ) ) ) ) ) )).

thf('2d.def_char_fun_of_inside_of_polygon_common_axiom',axiom,(
    ! [V_polygon: '2d.Shape'] :
      ( ( '2d.char-fun-of/1' @ ( '2d.inner-part-of/1' @ ( '2d.convex-polygon-common-operation/1' @ V_polygon ) ) )
      = ( ^ [V_p: '2d.Point'] :
            ( ( '2d.coplanar/4' @ V_p @ ( 'car/1' @ '2d.Point' @ ( '2d.vertices-of/1' @ V_polygon ) ) @ ( 'cadr/1' @ '2d.Point' @ ( '2d.vertices-of/1' @ V_polygon ) ) @ ( 'caddr/1' @ '2d.Point' @ ( '2d.vertices-of/1' @ V_polygon ) ) )
            & ( 'cyclic-all/2' @ '2d.Point'
              @ ^ [V_x: '2d.Point',V_y: '2d.Point',V_z: '2d.Point'] :
                  ( '2d.on/2' @ V_p @ ( '2d.inner-part-of/1' @ ( '2d.divided-region-including/2' @ ( '2d.line/2' @ V_x @ V_y ) @ V_z ) ) )
              @ ( '2d.vertices-of/1' @ V_polygon ) ) ) ) ) )).

thf('2d.def_char_fun_of_inside_of_polygon_axiom',axiom,(
    ! [V_vertices: ( 'ListOf' @ '2d.Point' )] :
      ( ( '2d.polygon-type/1' @ ( '2d.polygon/1' @ V_vertices ) )
     => ( ( '2d.char-fun-of/1' @ ( '2d.inner-part-of/1' @ ( '2d.polygon/1' @ V_vertices ) ) )
        = ( '2d.char-fun-of/1' @ ( '2d.inner-part-of/1' @ ( '2d.convex-polygon-common-operation/1' @ ( '2d.polygon/1' @ V_vertices ) ) ) ) ) ) )).

thf('2d.def_char_fun_of_inside_of_triangle_axiom',axiom,(
    ! [V_C: '2d.Point',V_B: '2d.Point',V_A: '2d.Point'] :
      ( ( '2d.triangle-type/1' @ ( '2d.triangle/3' @ V_A @ V_B @ V_C ) )
     => ( ( '2d.char-fun-of/1' @ ( '2d.inner-part-of/1' @ ( '2d.triangle/3' @ V_A @ V_B @ V_C ) ) )
        = ( '2d.char-fun-of/1' @ ( '2d.inner-part-of/1' @ ( '2d.polygon/1' @ ( 'cons/2' @ '2d.Point' @ V_A @ ( 'cons/2' @ '2d.Point' @ V_B @ ( 'cons/2' @ '2d.Point' @ V_C @ ( 'nil/0' @ '2d.Point' ) ) ) ) ) ) ) ) ) )).

thf('2d.def_char_fun_of_inside_of_square_axiom',axiom,(
    ! [V_D: '2d.Point',V_C: '2d.Point',V_B: '2d.Point',V_A: '2d.Point'] :
      ( ( '2d.square-type/1' @ ( '2d.square/4' @ V_A @ V_B @ V_C @ V_D ) )
     => ( ( '2d.char-fun-of/1' @ ( '2d.inner-part-of/1' @ ( '2d.square/4' @ V_A @ V_B @ V_C @ V_D ) ) )
        = ( '2d.char-fun-of/1' @ ( '2d.inner-part-of/1' @ ( '2d.polygon/1' @ ( 'cons/2' @ '2d.Point' @ V_A @ ( 'cons/2' @ '2d.Point' @ V_B @ ( 'cons/2' @ '2d.Point' @ V_C @ ( 'cons/2' @ '2d.Point' @ V_D @ ( 'nil/0' @ '2d.Point' ) ) ) ) ) ) ) ) ) ) )).

thf('2d.def_char_fun_of_inside_of_circle_axiom',axiom,(
    ! [V_circle: '2d.Shape'] :
      ( ( '2d.char-fun-of/1' @ ( '2d.inner-part-of/1' @ ( '2d.circle-shape/1' @ V_circle ) ) )
      = ( ^ [V_p: '2d.Point'] :
            ( ( $less @ ( '2d.distance^2/2' @ ( '2d.center-of/1' @ V_circle ) @ V_p ) @ ( '^/2' @ ( '2d.radius-of/1' @ V_circle ) @ 2.0 ) )
            & ( '2d.on/2' @ V_p @ ( '2d.extend-to-plane/1' @ V_circle ) ) ) ) ) )).

thf('2d.def_char_fun_of_inside_of_disk_axiom',axiom,(
    ! [V_disk: '2d.Shape'] :
      ( ( '2d.char-fun-of/1' @ ( '2d.inner-part-of/1' @ ( '2d.disk-shape/1' @ V_disk ) ) )
      = ( '2d.char-fun-of/1' @ ( '2d.inner-part-of/1' @ ( '2d.circle-shape/1' @ V_disk ) ) ) ) )).

thf('2d.def_char_fun_of_inside_of_arc_axiom',axiom,(
    ! [V_arc: '2d.Shape'] :
      ( ( '2d.char-fun-of/1' @ ( '2d.inner-part-of/1' @ ( '2d.arc-shape/1' @ V_arc ) ) )
      = ( ^ [V_P: '2d.Point'] :
            ( ( '2d.on/2' @ V_P @ ( '2d.extend-to-plane/1' @ V_arc ) )
            & ( V_P
             != ( '2d.center-of/1' @ V_arc ) )
            & ( ( '2d.radius^2/1' @ ( '2d.vec/2' @ ( '2d.center-of/1' @ V_arc ) @ V_P ) )
              = ( '2d.radius^2/1' @ ( '2d.vec/2' @ ( '2d.center-of/1' @ V_arc ) @ ( '2d.arc-ini-point/1' @ V_arc ) ) ) )
            & ( ( ( $lesseq @ 0.0 @ ( '2d.inner-prod/2' @ ( 'cadr/1' @ '2d.Vector' @ ( '2d.local-system-of/1' @ V_arc ) ) @ ( '2d.vec/2' @ ( '2d.center-of/1' @ V_arc ) @ ( '2d.arc-end-point/1' @ V_arc ) ) ) )
                & ( $less @ 0.0 @ ( '2d.inner-prod/2' @ ( 'cadr/1' @ '2d.Vector' @ ( '2d.local-system-of/1' @ V_arc ) ) @ ( '2d.vec/2' @ ( '2d.center-of/1' @ V_arc ) @ V_P ) ) )
                & ( $less @ ( '2d.inner-prod/2' @ ( 'car/1' @ '2d.Vector' @ ( '2d.local-system-of/1' @ V_arc ) ) @ ( '2d.vec/2' @ ( '2d.center-of/1' @ V_arc ) @ ( '2d.arc-end-point/1' @ V_arc ) ) ) @ ( '2d.inner-prod/2' @ ( 'car/1' @ '2d.Vector' @ ( '2d.local-system-of/1' @ V_arc ) ) @ ( '2d.vec/2' @ ( '2d.center-of/1' @ V_arc ) @ V_P ) ) ) )
              | ( ( $less @ ( '2d.inner-prod/2' @ ( 'cadr/1' @ '2d.Vector' @ ( '2d.local-system-of/1' @ V_arc ) ) @ ( '2d.vec/2' @ ( '2d.center-of/1' @ V_arc ) @ ( '2d.arc-end-point/1' @ V_arc ) ) ) @ 0.0 )
                & ( ( $less @ 0.0 @ ( '2d.inner-prod/2' @ ( 'cadr/1' @ '2d.Vector' @ ( '2d.local-system-of/1' @ V_arc ) ) @ ( '2d.vec/2' @ ( '2d.center-of/1' @ V_arc ) @ V_P ) ) )
                  | ( ( $lesseq @ ( '2d.inner-prod/2' @ ( 'cadr/1' @ '2d.Vector' @ ( '2d.local-system-of/1' @ V_arc ) ) @ ( '2d.vec/2' @ ( '2d.center-of/1' @ V_arc ) @ V_P ) ) @ 0.0 )
                    & ( $less @ ( '2d.inner-prod/2' @ ( 'car/1' @ '2d.Vector' @ ( '2d.local-system-of/1' @ V_arc ) ) @ ( '2d.vec/2' @ ( '2d.center-of/1' @ V_arc ) @ V_P ) ) @ ( '2d.inner-prod/2' @ ( 'car/1' @ '2d.Vector' @ ( '2d.local-system-of/1' @ V_arc ) ) @ ( '2d.vec/2' @ ( '2d.center-of/1' @ V_arc ) @ ( '2d.arc-end-point/1' @ V_arc ) ) ) ) ) ) ) ) ) ) ) )).

thf('2d.def_char_fun_of_inside_of_circular_sector_axiom',axiom,(
    ! [V_sector: '2d.Shape'] :
      ( ( '2d.char-fun-of/1' @ ( '2d.inner-part-of/1' @ ( '2d.circular-sector-shape/1' @ V_sector ) ) )
      = ( ^ [V_P: '2d.Point'] :
            ( ( '2d.on/2' @ V_P @ ( '2d.extend-to-plane/1' @ V_sector ) )
            & ( V_P
             != ( '2d.center-of/1' @ V_sector ) )
            & ( $less @ ( '2d.radius^2/1' @ ( '2d.vec/2' @ ( '2d.center-of/1' @ V_sector ) @ V_P ) ) @ ( '2d.radius^2/1' @ ( '2d.vec/2' @ ( '2d.center-of/1' @ V_sector ) @ ( '2d.circular-sector-ini-point/1' @ V_sector ) ) ) )
            & ( ( ( $lesseq @ 0.0 @ ( '2d.inner-prod/2' @ ( 'cadr/1' @ '2d.Vector' @ ( '2d.local-system-of/1' @ V_sector ) ) @ ( '2d.vec/2' @ ( '2d.center-of/1' @ V_sector ) @ ( '2d.circular-sector-end-point/1' @ V_sector ) ) ) )
                & ( $less @ 0.0 @ ( '2d.inner-prod/2' @ ( 'cadr/1' @ '2d.Vector' @ ( '2d.local-system-of/1' @ V_sector ) ) @ ( '2d.vec/2' @ ( '2d.center-of/1' @ V_sector ) @ V_P ) ) )
                & ( $less @ ( $product @ ( '2d.inner-prod/2' @ ( 'car/1' @ '2d.Vector' @ ( '2d.local-system-of/1' @ V_sector ) ) @ ( '2d.vec/2' @ ( '2d.center-of/1' @ V_sector ) @ ( '2d.circular-sector-end-point/1' @ V_sector ) ) ) @ ( '2d.radius/1' @ ( '2d.vec/2' @ ( '2d.center-of/1' @ V_sector ) @ V_P ) ) ) @ ( $product @ ( '2d.inner-prod/2' @ ( 'car/1' @ '2d.Vector' @ ( '2d.local-system-of/1' @ V_sector ) ) @ ( '2d.vec/2' @ ( '2d.center-of/1' @ V_sector ) @ V_P ) ) @ ( '2d.radius/1' @ ( '2d.vec/2' @ ( '2d.center-of/1' @ V_sector ) @ ( '2d.circular-sector-end-point/1' @ V_sector ) ) ) ) ) )
              | ( ( $less @ ( '2d.inner-prod/2' @ ( 'cadr/1' @ '2d.Vector' @ ( '2d.local-system-of/1' @ V_sector ) ) @ ( '2d.vec/2' @ ( '2d.center-of/1' @ V_sector ) @ ( '2d.circular-sector-end-point/1' @ V_sector ) ) ) @ 0.0 )
                & ( ( $less @ 0.0 @ ( '2d.inner-prod/2' @ ( 'cadr/1' @ '2d.Vector' @ ( '2d.local-system-of/1' @ V_sector ) ) @ ( '2d.vec/2' @ ( '2d.center-of/1' @ V_sector ) @ V_P ) ) )
                  | ( ( $lesseq @ ( '2d.inner-prod/2' @ ( 'cadr/1' @ '2d.Vector' @ ( '2d.local-system-of/1' @ V_sector ) ) @ ( '2d.vec/2' @ ( '2d.center-of/1' @ V_sector ) @ V_P ) ) @ 0.0 )
                    & ( $less @ ( $product @ ( '2d.inner-prod/2' @ ( 'car/1' @ '2d.Vector' @ ( '2d.local-system-of/1' @ V_sector ) ) @ ( '2d.vec/2' @ ( '2d.center-of/1' @ V_sector ) @ V_P ) ) @ ( '2d.radius/1' @ ( '2d.vec/2' @ ( '2d.center-of/1' @ V_sector ) @ ( '2d.circular-sector-end-point/1' @ V_sector ) ) ) ) @ ( $product @ ( '2d.inner-prod/2' @ ( 'car/1' @ '2d.Vector' @ ( '2d.local-system-of/1' @ V_sector ) ) @ ( '2d.vec/2' @ ( '2d.center-of/1' @ V_sector ) @ ( '2d.circular-sector-end-point/1' @ V_sector ) ) ) @ ( '2d.radius/1' @ ( '2d.vec/2' @ ( '2d.center-of/1' @ V_sector ) @ V_P ) ) ) ) ) ) ) ) ) ) ) )).

thf('2d.def_char_fun_of_half_line_with_boundary_axiom',axiom,(
    ! [V_b: '2d.Point',V_a: '2d.Point'] :
      ( ( '2d.half-line-type/1' @ ( '2d.half-line/2' @ V_a @ V_b ) )
     => ( ( '2d.char-fun-of/1' @ ( '2d.with-boundary/1' @ ( '2d.half-line/2' @ V_a @ V_b ) ) )
        = ( ^ [V_p: '2d.Point'] :
              ( ( '2d.colinear/3' @ V_p @ V_a @ V_b )
              & ( $lesseq @ 0.0 @ ( '2d.inner-prod/2' @ ( '2d.vec/2' @ V_a @ V_b ) @ ( '2d.vec/2' @ V_a @ V_p ) ) ) ) ) ) ) )).

thf('2d.def_char_fun_of_segment_with_boundary_axiom',axiom,(
    ! [V_b: '2d.Point',V_a: '2d.Point'] :
      ( ( '2d.segment-type/1' @ ( '2d.seg/2' @ V_a @ V_b ) )
     => ( ( '2d.char-fun-of/1' @ ( '2d.with-boundary/1' @ ( '2d.seg/2' @ V_a @ V_b ) ) )
        = ( ^ [V_p: '2d.Point'] :
              ( ( '2d.colinear/3' @ V_p @ V_a @ V_b )
              & ( $lesseq @ 0.0 @ ( '2d.inner-prod/2' @ ( '2d.vec/2' @ V_a @ V_b ) @ ( '2d.vec/2' @ V_a @ V_p ) ) )
              & ( $lesseq @ 0.0 @ ( '2d.inner-prod/2' @ ( '2d.vec/2' @ V_b @ V_a ) @ ( '2d.vec/2' @ V_b @ V_p ) ) ) ) ) ) ) )).

thf('2d.def_char_fun_of_polygon_with_boundary_common_axiom',axiom,(
    ! [V_polygon: '2d.Shape'] :
      ( ( '2d.char-fun-of/1' @ ( '2d.with-boundary/1' @ ( '2d.convex-polygon-common-operation/1' @ V_polygon ) ) )
      = ( ^ [V_p: '2d.Point'] :
            ( ( '2d.coplanar/4' @ V_p @ ( 'car/1' @ '2d.Point' @ ( '2d.vertices-of/1' @ V_polygon ) ) @ ( 'cadr/1' @ '2d.Point' @ ( '2d.vertices-of/1' @ V_polygon ) ) @ ( 'caddr/1' @ '2d.Point' @ ( '2d.vertices-of/1' @ V_polygon ) ) )
            & ( 'cyclic-all/2' @ '2d.Point'
              @ ^ [V_x: '2d.Point',V_y: '2d.Point',V_z: '2d.Point'] :
                  ( '2d.on/2' @ V_p @ ( '2d.with-boundary/1' @ ( '2d.divided-region-including/2' @ ( '2d.line/2' @ V_x @ V_y ) @ V_z ) ) )
              @ ( '2d.vertices-of/1' @ V_polygon ) ) ) ) ) )).

thf('2d.def_char_fun_of_polygon_with_boundary_axiom',axiom,(
    ! [V_vertices: ( 'ListOf' @ '2d.Point' )] :
      ( ( '2d.polygon-type/1' @ ( '2d.polygon/1' @ V_vertices ) )
     => ( ( '2d.char-fun-of/1' @ ( '2d.with-boundary/1' @ ( '2d.polygon/1' @ V_vertices ) ) )
        = ( '2d.char-fun-of/1' @ ( '2d.with-boundary/1' @ ( '2d.convex-polygon-common-operation/1' @ ( '2d.polygon/1' @ V_vertices ) ) ) ) ) ) )).

thf('2d.def_char_fun_of_triangle_with_boundary_axiom',axiom,(
    ! [V_C: '2d.Point',V_B: '2d.Point',V_A: '2d.Point'] :
      ( ( '2d.triangle-type/1' @ ( '2d.triangle/3' @ V_A @ V_B @ V_C ) )
     => ( ( '2d.char-fun-of/1' @ ( '2d.with-boundary/1' @ ( '2d.triangle/3' @ V_A @ V_B @ V_C ) ) )
        = ( '2d.char-fun-of/1' @ ( '2d.with-boundary/1' @ ( '2d.polygon/1' @ ( 'cons/2' @ '2d.Point' @ V_A @ ( 'cons/2' @ '2d.Point' @ V_B @ ( 'cons/2' @ '2d.Point' @ V_C @ ( 'nil/0' @ '2d.Point' ) ) ) ) ) ) ) ) ) )).

thf('2d.def_char_fun_of_square_with_boundary_axiom',axiom,(
    ! [V_D: '2d.Point',V_C: '2d.Point',V_B: '2d.Point',V_A: '2d.Point'] :
      ( ( '2d.square-type/1' @ ( '2d.square/4' @ V_A @ V_B @ V_C @ V_D ) )
     => ( ( '2d.char-fun-of/1' @ ( '2d.with-boundary/1' @ ( '2d.square/4' @ V_A @ V_B @ V_C @ V_D ) ) )
        = ( '2d.char-fun-of/1' @ ( '2d.with-boundary/1' @ ( '2d.polygon/1' @ ( 'cons/2' @ '2d.Point' @ V_A @ ( 'cons/2' @ '2d.Point' @ V_B @ ( 'cons/2' @ '2d.Point' @ V_C @ ( 'cons/2' @ '2d.Point' @ V_D @ ( 'nil/0' @ '2d.Point' ) ) ) ) ) ) ) ) ) ) )).

thf('2d.def_char_fun_of_circle_with_boundary_axiom',axiom,(
    ! [V_circle: '2d.Shape'] :
      ( ( '2d.char-fun-of/1' @ ( '2d.with-boundary/1' @ ( '2d.circle-shape/1' @ V_circle ) ) )
      = ( ^ [V_p: '2d.Point'] :
            ( ( $lesseq @ ( '2d.distance^2/2' @ ( '2d.center-of/1' @ V_circle ) @ V_p ) @ ( '^/2' @ ( '2d.radius-of/1' @ V_circle ) @ 2.0 ) )
            & ( '2d.on/2' @ V_p @ ( '2d.extend-to-plane/1' @ V_circle ) ) ) ) ) )).

thf('2d.def_char_fun_of_disk_with_boundary_axiom',axiom,(
    ! [V_disk: '2d.Shape'] :
      ( ( '2d.char-fun-of/1' @ ( '2d.with-boundary/1' @ ( '2d.disk-shape/1' @ V_disk ) ) )
      = ( '2d.char-fun-of/1' @ ( '2d.with-boundary/1' @ ( '2d.circle-shape/1' @ V_disk ) ) ) ) )).

thf('2d.def_char_fun_of_arc_with_boundary_axiom',axiom,(
    ! [V_arc: '2d.Shape'] :
      ( ( '2d.char-fun-of/1' @ ( '2d.with-boundary/1' @ ( '2d.arc-shape/1' @ V_arc ) ) )
      = ( ^ [V_P: '2d.Point'] :
            ( ( '2d.on/2' @ V_P @ ( '2d.extend-to-plane/1' @ V_arc ) )
            & ( ( '2d.radius^2/1' @ ( '2d.vec/2' @ ( '2d.center-of/1' @ V_arc ) @ V_P ) )
              = ( '2d.radius^2/1' @ ( '2d.vec/2' @ ( '2d.center-of/1' @ V_arc ) @ ( '2d.arc-ini-point/1' @ V_arc ) ) ) )
            & ( ( 0.0
                = ( '2d.radius^2/1' @ ( '2d.vec/2' @ ( '2d.center-of/1' @ V_arc ) @ ( '2d.arc-ini-point/1' @ V_arc ) ) ) )
              | ( ( $lesseq @ 0.0 @ ( '2d.inner-prod/2' @ ( 'cadr/1' @ '2d.Vector' @ ( '2d.local-system-of/1' @ V_arc ) ) @ ( '2d.vec/2' @ ( '2d.center-of/1' @ V_arc ) @ ( '2d.arc-end-point/1' @ V_arc ) ) ) )
                & ( $lesseq @ 0.0 @ ( '2d.inner-prod/2' @ ( 'cadr/1' @ '2d.Vector' @ ( '2d.local-system-of/1' @ V_arc ) ) @ ( '2d.vec/2' @ ( '2d.center-of/1' @ V_arc ) @ V_P ) ) )
                & ( $lesseq @ ( '2d.inner-prod/2' @ ( 'car/1' @ '2d.Vector' @ ( '2d.local-system-of/1' @ V_arc ) ) @ ( '2d.vec/2' @ ( '2d.center-of/1' @ V_arc ) @ ( '2d.arc-end-point/1' @ V_arc ) ) ) @ ( '2d.inner-prod/2' @ ( 'car/1' @ '2d.Vector' @ ( '2d.local-system-of/1' @ V_arc ) ) @ ( '2d.vec/2' @ ( '2d.center-of/1' @ V_arc ) @ V_P ) ) ) )
              | ( ( $less @ ( '2d.inner-prod/2' @ ( 'cadr/1' @ '2d.Vector' @ ( '2d.local-system-of/1' @ V_arc ) ) @ ( '2d.vec/2' @ ( '2d.center-of/1' @ V_arc ) @ ( '2d.arc-end-point/1' @ V_arc ) ) ) @ 0.0 )
                & ( ( $lesseq @ 0.0 @ ( '2d.inner-prod/2' @ ( 'cadr/1' @ '2d.Vector' @ ( '2d.local-system-of/1' @ V_arc ) ) @ ( '2d.vec/2' @ ( '2d.center-of/1' @ V_arc ) @ V_P ) ) )
                  | ( ( $less @ ( '2d.inner-prod/2' @ ( 'cadr/1' @ '2d.Vector' @ ( '2d.local-system-of/1' @ V_arc ) ) @ ( '2d.vec/2' @ ( '2d.center-of/1' @ V_arc ) @ V_P ) ) @ 0.0 )
                    & ( $lesseq @ ( '2d.inner-prod/2' @ ( 'car/1' @ '2d.Vector' @ ( '2d.local-system-of/1' @ V_arc ) ) @ ( '2d.vec/2' @ ( '2d.center-of/1' @ V_arc ) @ V_P ) ) @ ( '2d.inner-prod/2' @ ( 'car/1' @ '2d.Vector' @ ( '2d.local-system-of/1' @ V_arc ) ) @ ( '2d.vec/2' @ ( '2d.center-of/1' @ V_arc ) @ ( '2d.arc-end-point/1' @ V_arc ) ) ) ) ) ) ) ) ) ) ) )).

thf('2d.def_char_fun_of_circular_sector_with_boundary_axiom',axiom,(
    ! [V_sector: '2d.Shape'] :
      ( ( '2d.char-fun-of/1' @ ( '2d.with-boundary/1' @ ( '2d.circular-sector-shape/1' @ V_sector ) ) )
      = ( ^ [V_P: '2d.Point'] :
            ( ( V_P
              = ( '2d.center-of/1' @ V_sector ) )
            | ( ( V_P
               != ( '2d.center-of/1' @ V_sector ) )
              & ( '2d.on/2' @ V_P @ ( '2d.extend-to-plane/1' @ V_sector ) )
              & ( $lesseq @ ( '2d.radius^2/1' @ ( '2d.vec/2' @ ( '2d.center-of/1' @ V_sector ) @ V_P ) ) @ ( '2d.radius^2/1' @ ( '2d.vec/2' @ ( '2d.center-of/1' @ V_sector ) @ ( '2d.circular-sector-ini-point/1' @ V_sector ) ) ) )
              & ( ( ( $lesseq @ 0.0 @ ( '2d.inner-prod/2' @ ( 'cadr/1' @ '2d.Vector' @ ( '2d.local-system-of/1' @ V_sector ) ) @ ( '2d.vec/2' @ ( '2d.center-of/1' @ V_sector ) @ ( '2d.circular-sector-end-point/1' @ V_sector ) ) ) )
                  & ( $lesseq @ 0.0 @ ( '2d.inner-prod/2' @ ( 'cadr/1' @ '2d.Vector' @ ( '2d.local-system-of/1' @ V_sector ) ) @ ( '2d.vec/2' @ ( '2d.center-of/1' @ V_sector ) @ V_P ) ) )
                  & ( $lesseq @ ( $product @ ( '2d.inner-prod/2' @ ( 'car/1' @ '2d.Vector' @ ( '2d.local-system-of/1' @ V_sector ) ) @ ( '2d.vec/2' @ ( '2d.center-of/1' @ V_sector ) @ ( '2d.circular-sector-end-point/1' @ V_sector ) ) ) @ ( '2d.radius/1' @ ( '2d.vec/2' @ ( '2d.center-of/1' @ V_sector ) @ V_P ) ) ) @ ( $product @ ( '2d.inner-prod/2' @ ( 'car/1' @ '2d.Vector' @ ( '2d.local-system-of/1' @ V_sector ) ) @ ( '2d.vec/2' @ ( '2d.center-of/1' @ V_sector ) @ V_P ) ) @ ( '2d.radius/1' @ ( '2d.vec/2' @ ( '2d.center-of/1' @ V_sector ) @ ( '2d.circular-sector-end-point/1' @ V_sector ) ) ) ) ) )
                | ( ( $less @ ( '2d.inner-prod/2' @ ( 'cadr/1' @ '2d.Vector' @ ( '2d.local-system-of/1' @ V_sector ) ) @ ( '2d.vec/2' @ ( '2d.center-of/1' @ V_sector ) @ ( '2d.circular-sector-end-point/1' @ V_sector ) ) ) @ 0.0 )
                  & ( ( $lesseq @ 0.0 @ ( '2d.inner-prod/2' @ ( 'cadr/1' @ '2d.Vector' @ ( '2d.local-system-of/1' @ V_sector ) ) @ ( '2d.vec/2' @ ( '2d.center-of/1' @ V_sector ) @ V_P ) ) )
                    | ( ( $less @ ( '2d.inner-prod/2' @ ( 'cadr/1' @ '2d.Vector' @ ( '2d.local-system-of/1' @ V_sector ) ) @ ( '2d.vec/2' @ ( '2d.center-of/1' @ V_sector ) @ V_P ) ) @ 0.0 )
                      & ( $lesseq @ ( $product @ ( '2d.inner-prod/2' @ ( 'car/1' @ '2d.Vector' @ ( '2d.local-system-of/1' @ V_sector ) ) @ ( '2d.vec/2' @ ( '2d.center-of/1' @ V_sector ) @ V_P ) ) @ ( '2d.radius/1' @ ( '2d.vec/2' @ ( '2d.center-of/1' @ V_sector ) @ ( '2d.circular-sector-end-point/1' @ V_sector ) ) ) ) @ ( $product @ ( '2d.inner-prod/2' @ ( 'car/1' @ '2d.Vector' @ ( '2d.local-system-of/1' @ V_sector ) ) @ ( '2d.vec/2' @ ( '2d.center-of/1' @ V_sector ) @ ( '2d.circular-sector-end-point/1' @ V_sector ) ) ) @ ( '2d.radius/1' @ ( '2d.vec/2' @ ( '2d.center-of/1' @ V_sector ) @ V_P ) ) ) ) ) ) ) ) ) ) ) ) )).

thf('2d.def_char_fun_of_boundary_of_half_line_axiom',axiom,(
    ! [V_R: '2d.Point',V_Q: '2d.Point'] :
      ( ( '2d.half-line-type/1' @ ( '2d.half-line/2' @ V_Q @ V_R ) )
     => ( ( '2d.char-fun-of/1' @ ( '2d.boundary-of/1' @ ( '2d.half-line/2' @ V_Q @ V_R ) ) )
        = ( ^ [V_p: '2d.Point'] : ( V_p = V_Q ) ) ) ) )).

thf('2d.def_char_fun_of_boundary_of_segment_axiom',axiom,(
    ! [V_b: '2d.Point',V_a: '2d.Point'] :
      ( ( '2d.segment-type/1' @ ( '2d.seg/2' @ V_a @ V_b ) )
     => ( ( '2d.char-fun-of/1' @ ( '2d.boundary-of/1' @ ( '2d.seg/2' @ V_a @ V_b ) ) )
        = ( ^ [V_p: '2d.Point'] :
              ( ( V_p = V_a )
              | ( V_p = V_b ) ) ) ) ) )).

thf('2d.def_char_fun_of_boundary_of_polygon_common_axiom',axiom,(
    ! [V_polygon: '2d.Shape'] :
      ( ( '2d.char-fun-of/1' @ ( '2d.boundary-of/1' @ ( '2d.convex-polygon-common-operation/1' @ V_polygon ) ) )
      = ( ^ [V_p: '2d.Point'] :
            ( ( '2d.on/2' @ V_p @ ( '2d.with-boundary/1' @ ( '2d.convex-polygon-common-operation/1' @ V_polygon ) ) )
            & ( 'some/2' @ '2d.Shape'
              @ ^ [V_s: '2d.Shape'] :
                  ( '2d.on/2' @ V_p @ ( '2d.with-boundary/1' @ ( '2d.seg-extention-of/1' @ V_s ) ) )
              @ ( '2d.sides-of/1' @ V_polygon ) ) ) ) ) )).

thf('2d.def_char_fun_of_boundary_of_polygon_axiom',axiom,(
    ! [V_vertices: ( 'ListOf' @ '2d.Point' )] :
      ( ( '2d.polygon-type/1' @ ( '2d.polygon/1' @ V_vertices ) )
     => ( ( '2d.char-fun-of/1' @ ( '2d.boundary-of/1' @ ( '2d.polygon/1' @ V_vertices ) ) )
        = ( '2d.char-fun-of/1' @ ( '2d.boundary-of/1' @ ( '2d.convex-polygon-common-operation/1' @ ( '2d.polygon/1' @ V_vertices ) ) ) ) ) ) )).

thf('2d.def_char_fun_of_boundary_of_triangle_axiom',axiom,(
    ! [V_C: '2d.Point',V_B: '2d.Point',V_A: '2d.Point'] :
      ( ( '2d.triangle-type/1' @ ( '2d.triangle/3' @ V_A @ V_B @ V_C ) )
     => ( ( '2d.char-fun-of/1' @ ( '2d.boundary-of/1' @ ( '2d.triangle/3' @ V_A @ V_B @ V_C ) ) )
        = ( '2d.char-fun-of/1' @ ( '2d.boundary-of/1' @ ( '2d.polygon/1' @ ( 'cons/2' @ '2d.Point' @ V_A @ ( 'cons/2' @ '2d.Point' @ V_B @ ( 'cons/2' @ '2d.Point' @ V_C @ ( 'nil/0' @ '2d.Point' ) ) ) ) ) ) ) ) ) )).

thf('2d.def_char_fun_of_boundary_of_square_axiom',axiom,(
    ! [V_D: '2d.Point',V_C: '2d.Point',V_B: '2d.Point',V_A: '2d.Point'] :
      ( ( '2d.square-type/1' @ ( '2d.square/4' @ V_A @ V_B @ V_C @ V_D ) )
     => ( ( '2d.char-fun-of/1' @ ( '2d.boundary-of/1' @ ( '2d.square/4' @ V_A @ V_B @ V_C @ V_D ) ) )
        = ( '2d.char-fun-of/1' @ ( '2d.boundary-of/1' @ ( '2d.polygon/1' @ ( 'cons/2' @ '2d.Point' @ V_A @ ( 'cons/2' @ '2d.Point' @ V_B @ ( 'cons/2' @ '2d.Point' @ V_C @ ( 'cons/2' @ '2d.Point' @ V_D @ ( 'nil/0' @ '2d.Point' ) ) ) ) ) ) ) ) ) ) )).

thf('2d.def_char_fun_of_boundary_of_circle_axiom',axiom,(
    ! [V_circle: '2d.Shape'] :
      ( ( '2d.char-fun-of/1' @ ( '2d.boundary-of/1' @ ( '2d.circle-shape/1' @ V_circle ) ) )
      = ( ^ [V_p: '2d.Point'] :
            ( ( ( '2d.distance^2/2' @ ( '2d.center-of/1' @ V_circle ) @ V_p )
              = ( '^/2' @ ( '2d.radius-of/1' @ V_circle ) @ 2.0 ) )
            & ( '2d.on/2' @ V_p @ ( '2d.extend-to-plane/1' @ V_circle ) ) ) ) ) )).

thf('2d.def_char_fun_of_boundary_of_disk_axiom',axiom,(
    ! [V_disk: '2d.Shape'] :
      ( ( '2d.char-fun-of/1' @ ( '2d.boundary-of/1' @ ( '2d.disk-shape/1' @ V_disk ) ) )
      = ( '2d.char-fun-of/1' @ ( '2d.boundary-of/1' @ ( '2d.circle-shape/1' @ V_disk ) ) ) ) )).

thf('2d.def_char_fun_of_boundary_of_arc_axiom',axiom,(
    ! [V_arc: '2d.Shape'] :
      ( ( '2d.char-fun-of/1' @ ( '2d.boundary-of/1' @ ( '2d.arc-shape/1' @ V_arc ) ) )
      = ( ^ [V_P: '2d.Point'] :
            ( ( V_P
              = ( '2d.arc-ini-point/1' @ V_arc ) )
            | ( V_P
              = ( '2d.arc-end-point/1' @ V_arc ) ) ) ) ) )).

thf('2d.def_char_fun_of_boundary_of_circular_sector_axiom',axiom,(
    ! [V_sector: '2d.Shape'] :
      ( ( '2d.char-fun-of/1' @ ( '2d.boundary-of/1' @ ( '2d.circular-sector-shape/1' @ V_sector ) ) )
      = ( ^ [V_P: '2d.Point'] :
            ( 'some/2' @ '2d.Shape'
            @ ^ [V_S: '2d.Shape'] :
                ( '2d.on/2' @ V_P @ V_S )
            @ ( '2d.sides-of/1' @ V_sector ) ) ) ) )).

thf('2d.def_char_fun_of_half_line_axiom',axiom,(
    ! [V_R: '2d.Point',V_Q: '2d.Point'] :
      ( ( '2d.half-line-type/1' @ ( '2d.half-line/2' @ V_Q @ V_R ) )
     => ( ( '2d.char-fun-of/1' @ ( '2d.half-line/2' @ V_Q @ V_R ) )
        = ( '2d.char-fun-of/1' @ ( '2d.with-boundary/1' @ ( '2d.half-line/2' @ V_Q @ V_R ) ) ) ) ) )).

thf('2d.def_char_fun_of_segment_axiom',axiom,(
    ! [V_b: '2d.Point',V_a: '2d.Point'] :
      ( ( '2d.segment-type/1' @ ( '2d.seg/2' @ V_a @ V_b ) )
     => ( ( '2d.char-fun-of/1' @ ( '2d.seg/2' @ V_a @ V_b ) )
        = ( '2d.char-fun-of/1' @ ( '2d.with-boundary/1' @ ( '2d.seg/2' @ V_a @ V_b ) ) ) ) ) )).

thf('2d.def_char_fun_of_triangle_axiom',axiom,(
    ! [V_C: '2d.Point',V_B: '2d.Point',V_A: '2d.Point'] :
      ( ( '2d.triangle-type/1' @ ( '2d.triangle/3' @ V_A @ V_B @ V_C ) )
     => ( ( '2d.char-fun-of/1' @ ( '2d.triangle/3' @ V_A @ V_B @ V_C ) )
        = ( '2d.char-fun-of/1' @ ( '2d.with-boundary/1' @ ( '2d.triangle/3' @ V_A @ V_B @ V_C ) ) ) ) ) )).

thf('2d.def_char_fun_of_square_axiom',axiom,(
    ! [V_D: '2d.Point',V_C: '2d.Point',V_B: '2d.Point',V_A: '2d.Point'] :
      ( ( '2d.square-type/1' @ ( '2d.square/4' @ V_A @ V_B @ V_C @ V_D ) )
     => ( ( '2d.char-fun-of/1' @ ( '2d.square/4' @ V_A @ V_B @ V_C @ V_D ) )
        = ( '2d.char-fun-of/1' @ ( '2d.with-boundary/1' @ ( '2d.square/4' @ V_A @ V_B @ V_C @ V_D ) ) ) ) ) )).

thf('2d.def_char_fun_of_polygon_axiom',axiom,(
    ! [V_vertices: ( 'ListOf' @ '2d.Point' )] :
      ( ( '2d.polygon-type/1' @ ( '2d.polygon/1' @ V_vertices ) )
     => ( ( '2d.char-fun-of/1' @ ( '2d.polygon/1' @ V_vertices ) )
        = ( '2d.char-fun-of/1' @ ( '2d.with-boundary/1' @ ( '2d.polygon/1' @ V_vertices ) ) ) ) ) )).

thf('2d.def_char_fun_of_circle_axiom',axiom,(
    ! [V_circle: '2d.Shape'] :
      ( ( '2d.char-fun-of/1' @ ( '2d.circle-shape/1' @ V_circle ) )
      = ( '2d.char-fun-of/1' @ ( '2d.boundary-of/1' @ ( '2d.circle-shape/1' @ V_circle ) ) ) ) )).

thf('2d.def_char_fun_of_disk_axiom',axiom,(
    ! [V_disk: '2d.Shape'] :
      ( ( '2d.char-fun-of/1' @ ( '2d.disk-shape/1' @ V_disk ) )
      = ( '2d.char-fun-of/1' @ ( '2d.with-boundary/1' @ ( '2d.disk-shape/1' @ V_disk ) ) ) ) )).

thf('2d.def_char_fun_of_arc_axiom',axiom,(
    ! [V_arc: '2d.Shape'] :
      ( ( '2d.char-fun-of/1' @ ( '2d.arc-shape/1' @ V_arc ) )
      = ( '2d.char-fun-of/1' @ ( '2d.with-boundary/1' @ ( '2d.arc-shape/1' @ V_arc ) ) ) ) )).

thf('2d.def_char_fun_of_circular_sector_axiom',axiom,(
    ! [V_sector: '2d.Shape'] :
      ( ( '2d.char-fun-of/1' @ ( '2d.circular-sector-shape/1' @ V_sector ) )
      = ( '2d.char-fun-of/1' @ ( '2d.with-boundary/1' @ ( '2d.circular-sector-shape/1' @ V_sector ) ) ) ) )).

thf('2d.def_opposite_vertice_of_polygon_common_axiom',axiom,(
    ! [V_side: '2d.Shape',V_polygon: '2d.Shape'] :
      ( ( '2d.opposite-vertice-of/2' @ V_side @ ( '2d.convex-polygon-common-operation/1' @ V_polygon ) )
      = ( 'car/1' @ '2d.Point' @ ( 'remove-list/2' @ '2d.Point' @ ( '2d.vertices-of/1' @ V_side ) @ ( '2d.vertices-of/1' @ V_polygon ) ) ) ) )).

thf('2d.def_opposite_vertice_of_triangle_axiom',axiom,(
    ! [V_C: '2d.Point',V_B: '2d.Point',V_A: '2d.Point',V_side: '2d.Shape'] :
      ( ( '2d.triangle-type/1' @ ( '2d.triangle/3' @ V_A @ V_B @ V_C ) )
     => ( ( '2d.opposite-vertice-of/2' @ V_side @ ( '2d.triangle/3' @ V_A @ V_B @ V_C ) )
        = ( '2d.opposite-vertice-of/2' @ V_side @ ( '2d.convex-polygon-common-operation/1' @ ( '2d.triangle/3' @ V_A @ V_B @ V_C ) ) ) ) ) )).

thf('2d.def_opposite_vertice_of_square_axiom',axiom,(
    ! [V_D: '2d.Point',V_C: '2d.Point',V_B: '2d.Point',V_A: '2d.Point',V_side: '2d.Shape'] :
      ( ( '2d.square-type/1' @ ( '2d.square/4' @ V_A @ V_B @ V_C @ V_D ) )
     => ( ( '2d.opposite-vertice-of/2' @ V_side @ ( '2d.square/4' @ V_A @ V_B @ V_C @ V_D ) )
        = ( '2d.opposite-vertice-of/2' @ V_side @ ( '2d.convex-polygon-common-operation/1' @ ( '2d.square/4' @ V_A @ V_B @ V_C @ V_D ) ) ) ) ) )).

thf('2d.def_opposite_vertice_of_polygon_axiom',axiom,(
    ! [V_vertices: ( 'ListOf' @ '2d.Point' ),V_side: '2d.Shape'] :
      ( ( '2d.polygon-type/1' @ ( '2d.polygon/1' @ V_vertices ) )
     => ( ( '2d.opposite-vertice-of/2' @ V_side @ ( '2d.polygon/1' @ V_vertices ) )
        = ( '2d.opposite-vertice-of/2' @ V_side @ ( '2d.convex-polygon-common-operation/1' @ ( '2d.polygon/1' @ V_vertices ) ) ) ) ) )).

thf('2d.def_is_diagonal_of_polygon_axiom',axiom,(
    ! [V_vertices: ( 'ListOf' @ '2d.Point' ),V_Q: '2d.Point',V_P: '2d.Point'] :
      ( ( ( '2d.segment-type/1' @ ( '2d.seg/2' @ V_P @ V_Q ) )
        & ( '2d.polygon-type/1' @ ( '2d.polygon/1' @ V_vertices ) ) )
     => ( ( '2d.is-diagonal-of/2' @ ( '2d.seg/2' @ V_P @ V_Q ) @ ( '2d.polygon/1' @ V_vertices ) )
      <=> ( ( 'member/2' @ ( 'Pair' @ '2d.Point' @ '2d.Point' ) @ ( 'pair/2' @ '2d.Point' @ '2d.Point' @ V_P @ V_Q ) @ ( 'all-pairs/1' @ '2d.Point' @ V_vertices ) )
          | ( 'member/2' @ ( 'Pair' @ '2d.Point' @ '2d.Point' ) @ ( 'pair/2' @ '2d.Point' @ '2d.Point' @ V_Q @ V_P ) @ ( 'all-pairs/1' @ '2d.Point' @ V_vertices ) ) ) ) ) )).

thf('2d.def_inside_of_divided_by_line_region_including_axiom',axiom,(
    ! [V_point: '2d.Point',V_q: '2d.Point',V_p: '2d.Point'] :
      ( ( '2d.line-type/1' @ ( '2d.line/2' @ V_p @ V_q ) )
     => ( ( '2d.char-fun-of/1' @ ( '2d.inner-part-of/1' @ ( '2d.divided-region-including/2' @ ( '2d.line/2' @ V_p @ V_q ) @ V_point ) ) )
        = ( ^ [V_P: '2d.Point'] :
              ( $less @ 0.0 @ ( '2d.inner-prod/2' @ ( '2d.vec/2' @ ( '2d.foot-of-perpendicular-line-from-to/2' @ V_point @ ( '2d.line/2' @ V_p @ V_q ) ) @ V_P ) @ ( '2d.vec/2' @ ( '2d.foot-of-perpendicular-line-from-to/2' @ V_point @ ( '2d.line/2' @ V_p @ V_q ) ) @ V_point ) ) ) ) ) ) )).

thf('2d.def_divided_by_line_region_including_with_boundary_axiom',axiom,(
    ! [V_point: '2d.Point',V_q: '2d.Point',V_p: '2d.Point'] :
      ( ( '2d.line-type/1' @ ( '2d.line/2' @ V_p @ V_q ) )
     => ( ( '2d.char-fun-of/1' @ ( '2d.with-boundary/1' @ ( '2d.divided-region-including/2' @ ( '2d.line/2' @ V_p @ V_q ) @ V_point ) ) )
        = ( ^ [V_P: '2d.Point'] :
              ( $lesseq @ 0.0 @ ( '2d.inner-prod/2' @ ( '2d.vec/2' @ ( '2d.foot-of-perpendicular-line-from-to/2' @ V_point @ ( '2d.line/2' @ V_p @ V_q ) ) @ V_P ) @ ( '2d.vec/2' @ ( '2d.foot-of-perpendicular-line-from-to/2' @ V_point @ ( '2d.line/2' @ V_p @ V_q ) ) @ V_point ) ) ) ) ) ) )).

thf('2d.def_divided_by_line_region_including_axiom',axiom,(
    ! [V_point: '2d.Point',V_q: '2d.Point',V_p: '2d.Point'] :
      ( ( '2d.line-type/1' @ ( '2d.line/2' @ V_p @ V_q ) )
     => ( ( '2d.char-fun-of/1' @ ( '2d.divided-region-including/2' @ ( '2d.line/2' @ V_p @ V_q ) @ V_point ) )
        = ( '2d.char-fun-of/1' @ ( '2d.with-boundary/1' @ ( '2d.divided-region-including/2' @ ( '2d.line/2' @ V_p @ V_q ) @ V_point ) ) ) ) ) )).

thf('2d.def-shape-inside-of_axiom',axiom,(
    ! [V_S: '2d.Shape'] :
      ( ( '2d.shape-inside-of/1' @ V_S )
      = ( '2d.shape-of-cpfun/1'
        @ ^ [V_p: '2d.Point'] :
            ( '2d.point-inside-of/2' @ V_p @ V_S ) ) ) )).

thf('2d.def-shape-outside-of_axiom',axiom,(
    ! [V_S: '2d.Shape'] :
      ( ( '2d.shape-outside-of/1' @ V_S )
      = ( '2d.shape-of-cpfun/1'
        @ ^ [V_p: '2d.Point'] :
            ( '2d.point-outside-of/2' @ V_p @ V_S ) ) ) )).

thf('2d.shape-enclosed-by-cpfun/1_type',type,(
    '2d.shape-enclosed-by-cpfun/1': ( 'ListOf' @ ( '2d.Point' > $o ) ) > '2d.Shape' )).

thf('2d.shape-enclosed-by-within/2_type',type,(
    '2d.shape-enclosed-by-within/2': ( 'ListOf' @ ( '2d.Point' > $o ) ) > ( '2d.Point' > $o ) > '2d.Shape' )).

thf('2d.def-shape-enclosed-by-2-shape-enclosed-by-cpfun_axiom',axiom,(
    ! [V_shapes: ( 'ListOf' @ '2d.Shape' )] :
      ( ( '2d.shape-enclosed-by/1' @ V_shapes )
      = ( '2d.shape-enclosed-by-cpfun/1'
        @ ( 'map/2' @ '2d.Shape' @ ( '2d.Point' > $o )
          @ ^ [V_s: '2d.Shape',V_p: '2d.Point'] :
              ( '2d.on/2' @ V_p @ V_s )
          @ V_shapes ) ) ) )).

thf('2d.def-intersection-enc-enc_axiom',axiom,(
    ! [V_boundaries1: ( 'ListOf' @ ( '2d.Point' > $o ) ),V_boundaries2: ( 'ListOf' @ ( '2d.Point' > $o ) )] :
      ( ( '2d.intersection/2' @ ( '2d.shape-enclosed-by-cpfun/1' @ V_boundaries1 ) @ ( '2d.shape-enclosed-by-cpfun/1' @ V_boundaries2 ) )
      = ( '2d.shape-enclosed-by-within/2' @ V_boundaries1 @ ( '2d.char-fun-of/1' @ ( '2d.shape-enclosed-by-cpfun/1' @ V_boundaries2 ) ) ) ) )).

thf('2d.def-intersection-encwithin-and-other_axiom',axiom,(
    ! [V_boundaries: ( 'ListOf' @ ( '2d.Point' > $o ) ),V_shape1: ( '2d.Point' > $o ),V_shape2: '2d.Shape'] :
      ( ( '2d.intersection/2' @ ( '2d.shape-enclosed-by-within/2' @ V_boundaries @ V_shape1 ) @ V_shape2 )
      = ( '2d.shape-enclosed-by-within/2' @ V_boundaries
        @ ^ [V_P: '2d.Point'] :
            ( ( V_shape1 @ V_P )
            & ( '2d.on/2' @ V_P @ V_shape2 ) ) ) ) )).

thf('2d.def-intersection-other-and-encwithin_axiom',axiom,(
    ! [V_boundaries: ( 'ListOf' @ ( '2d.Point' > $o ) ),V_shape1: '2d.Shape',V_shape2: ( '2d.Point' > $o )] :
      ( ( '2d.intersection/2' @ V_shape1 @ ( '2d.shape-enclosed-by-within/2' @ V_boundaries @ V_shape2 ) )
      = ( '2d.intersection/2' @ ( '2d.shape-enclosed-by-within/2' @ V_boundaries @ V_shape2 ) @ V_shape1 ) ) )).

thf('2d.def-intersection-enc-and-other_axiom',axiom,(
    ! [V_boundaries: ( 'ListOf' @ ( '2d.Point' > $o ) ),V_shape: '2d.Shape'] :
      ( ( '2d.intersection/2' @ ( '2d.shape-enclosed-by-cpfun/1' @ V_boundaries ) @ V_shape )
      = ( '2d.shape-enclosed-by-within/2' @ V_boundaries @ ( '2d.char-fun-of/1' @ V_shape ) ) ) )).

thf('2d.def-intersection-other-and-enc_axiom',axiom,(
    ! [V_boundaries: ( 'ListOf' @ ( '2d.Point' > $o ) ),V_shape: '2d.Shape'] :
      ( ( '2d.intersection/2' @ V_shape @ ( '2d.shape-enclosed-by-cpfun/1' @ V_boundaries ) )
      = ( '2d.intersection/2' @ ( '2d.shape-enclosed-by-cpfun/1' @ V_boundaries ) @ V_shape ) ) )).

thf('2d.def_on_shape_enclosed_by_cpfun_axiom',axiom,(
    ! [V_point: '2d.Point',V_boundaries: ( 'ListOf' @ ( '2d.Point' > $o ) )] :
      ( ( '2d.on/2' @ V_point @ ( '2d.shape-enclosed-by-cpfun/1' @ V_boundaries ) )
    <=> ( '2d.char-fun-of/1' @ ( '2d.shape-enclosed-by-cpfun/1' @ V_boundaries ) @ V_point ) ) )).

thf('2d.def_on_shape_enclosed_by_within_axiom',axiom,(
    ! [V_point: '2d.Point',V_boundaries: ( 'ListOf' @ ( '2d.Point' > $o ) ),V_region: ( '2d.Point' > $o )] :
      ( ( '2d.on/2' @ V_point @ ( '2d.shape-enclosed-by-within/2' @ V_boundaries @ V_region ) )
    <=> ( ( '2d.on/2' @ V_point @ ( '2d.shape-enclosed-by-cpfun/1' @ V_boundaries ) )
        & ( V_region @ V_point ) ) ) )).

thf('2d.def_shape_enclosed_by_cpfun_eq_something_axiom',axiom,(
    ! [V_boundaries: ( 'ListOf' @ ( '2d.Point' > $o ) ),V_S: '2d.Shape'] :
      ( ( ( '2d.shape-enclosed-by-cpfun/1' @ V_boundaries )
        = V_S )
    <=> ( ( '2d.shape-of-cpfun/1' @ ( '2d.char-fun-of/1' @ ( '2d.shape-enclosed-by-cpfun/1' @ V_boundaries ) ) )
        = V_S ) ) )).

thf('2d.def-intersection-list_axiom',axiom,(
    ! [V_S1: '2d.Shape',V_S2: '2d.Shape',V_S3: '2d.Shape'] :
      ( ( '2d.intersection/2' @ ( '2d.intersection/2' @ V_S1 @ V_S2 ) @ V_S3 )
      = ( '2d.intersection/2' @ V_S1 @ ( '2d.intersection/2' @ V_S2 @ V_S3 ) ) ) )).

thf('2d.def-intersection-n-to-intersection-list-cons_axiom',axiom,(
    ! [V_hd: '2d.Shape',V_tl: ( 'ListOf' @ '2d.Shape' )] :
      ( ( '2d.intersection/1' @ ( 'cons/2' @ '2d.Shape' @ V_hd @ V_tl ) )
      = ( '2d.intersection/2' @ V_hd @ ( '2d.intersection/1' @ V_tl ) ) ) )).

thf('2d.def-intersection-n-to-intersection-list-nil_axiom',axiom,
    ( ( '2d.intersection/1' @ ( 'nil/0' @ '2d.Shape' ) )
    = ( '2d.shape-of-cpfun/1'
      @ ^ [V__: '2d.Point'] : $true ) )).

thf('2d.half-line-type_axiom',axiom,(
    ! [V_l: '2d.Shape'] :
      ( ( '2d.half-line-type/1' @ V_l )
    <=> ? [V_Q: '2d.Point',V_P: '2d.Point'] :
          ( ( V_l
            = ( '2d.half-line/2' @ V_P @ V_Q ) )
          & ( V_P != V_Q ) ) ) )).

thf('2d.segment-type_axiom',axiom,(
    ! [V_S: '2d.Shape'] :
      ( ( '2d.segment-type/1' @ V_S )
    <=> ? [V_Q: '2d.Point',V_P: '2d.Point'] :
          ( ( V_S
            = ( '2d.seg/2' @ V_P @ V_Q ) )
          & ( V_P != V_Q ) ) ) )).

thf('2d.angle-type_axiom',axiom,(
    ! [V_a: '2d.Angle'] :
      ( ( '2d.angle-type/1' @ V_a )
    <=> ? [V_R: '2d.Point',V_Q: '2d.Point',V_P: '2d.Point'] :
          ( ( V_a
            = ( '2d.angle/3' @ V_P @ V_Q @ V_R ) )
          & ( V_P != V_Q )
          & ( V_R != V_Q ) ) ) )).

thf('2d.triangle-type_axiom',axiom,(
    ! [V_T: '2d.Shape'] :
      ( ( '2d.triangle-type/1' @ V_T )
    <=> ? [V_R: '2d.Point',V_Q: '2d.Point',V_P: '2d.Point'] :
          ( ( V_T
            = ( '2d.triangle/3' @ V_P @ V_Q @ V_R ) )
          & ( '2d.is-triangle/3' @ V_P @ V_Q @ V_R ) ) ) )).

thf('2d.equilateral-triangle-type_axiom',axiom,(
    ! [V_T: '2d.Shape'] :
      ( ( '2d.equilateral-triangle-type/1' @ V_T )
    <=> ? [V_R: '2d.Point',V_Q: '2d.Point',V_P: '2d.Point'] :
          ( ( V_T
            = ( '2d.triangle/3' @ V_P @ V_Q @ V_R ) )
          & ( '2d.is-equilateral-triangle/3' @ V_P @ V_Q @ V_R ) ) ) )).

thf('2d.right-triangle-type_axiom',axiom,(
    ! [V_T: '2d.Shape'] :
      ( ( '2d.right-triangle-type/1' @ V_T )
    <=> ? [V_R: '2d.Point',V_Q: '2d.Point',V_P: '2d.Point'] :
          ( ( V_T
            = ( '2d.triangle/3' @ V_P @ V_Q @ V_R ) )
          & ( '2d.is-right-triangle/3' @ V_P @ V_Q @ V_R ) ) ) )).

thf('2d.acute-triangle-type_axiom',axiom,(
    ! [V_T: '2d.Shape'] :
      ( ( '2d.acute-triangle-type/1' @ V_T )
    <=> ? [V_R: '2d.Point',V_Q: '2d.Point',V_P: '2d.Point'] :
          ( ( V_T
            = ( '2d.triangle/3' @ V_P @ V_Q @ V_R ) )
          & ( '2d.is-acute-triangle/3' @ V_P @ V_Q @ V_R ) ) ) )).

thf('2d.obtuse-triangle-type_axiom',axiom,(
    ! [V_T: '2d.Shape'] :
      ( ( '2d.obtuse-triangle-type/1' @ V_T )
    <=> ? [V_R: '2d.Point',V_Q: '2d.Point',V_P: '2d.Point'] :
          ( ( V_T
            = ( '2d.triangle/3' @ V_P @ V_Q @ V_R ) )
          & ( '2d.is-obtuse-triangle/3' @ V_P @ V_Q @ V_R ) ) ) )).

thf('2d.isosceles-triangle-type_axiom',axiom,(
    ! [V_T: '2d.Shape'] :
      ( ( '2d.isosceles-triangle-type/1' @ V_T )
    <=> ? [V_R: '2d.Point',V_Q: '2d.Point',V_P: '2d.Point'] :
          ( ( V_T
            = ( '2d.triangle/3' @ V_P @ V_Q @ V_R ) )
          & ( '2d.is-isosceles-triangle/3' @ V_P @ V_Q @ V_R ) ) ) )).

thf('2d.square-type_axiom',axiom,(
    ! [V_s: '2d.Shape'] :
      ( ( '2d.square-type/1' @ V_s )
    <=> ? [V_S: '2d.Point',V_R: '2d.Point',V_Q: '2d.Point',V_P: '2d.Point'] :
          ( ( V_s
            = ( '2d.square/4' @ V_P @ V_Q @ V_R @ V_S ) )
          & ( '2d.is-square/4' @ V_P @ V_Q @ V_R @ V_S ) ) ) )).

thf('2d.rectangle-type_axiom',axiom,(
    ! [V_s: '2d.Shape'] :
      ( ( '2d.rectangle-type/1' @ V_s )
    <=> ? [V_S: '2d.Point',V_R: '2d.Point',V_Q: '2d.Point',V_P: '2d.Point'] :
          ( ( V_s
            = ( '2d.square/4' @ V_P @ V_Q @ V_R @ V_S ) )
          & ( '2d.is-rectangle/4' @ V_P @ V_Q @ V_R @ V_S ) ) ) )).

thf('2d.regular-square-type_axiom',axiom,(
    ! [V_s: '2d.Shape'] :
      ( ( '2d.regular-square-type/1' @ V_s )
    <=> ? [V_S: '2d.Point',V_R: '2d.Point',V_Q: '2d.Point',V_P: '2d.Point'] :
          ( ( V_s
            = ( '2d.square/4' @ V_P @ V_Q @ V_R @ V_S ) )
          & ( '2d.is-rectangle/4' @ V_P @ V_Q @ V_R @ V_S )
          & ( '2d.is-rhombus/4' @ V_P @ V_Q @ V_R @ V_S ) ) ) )).

thf('2d.regular-pentagon-type_axiom',axiom,(
    ! [V_s: '2d.Shape'] :
      ( ( '2d.regular-pentagon-type/1' @ V_s )
    <=> ? [V_T: '2d.Point',V_S: '2d.Point',V_R: '2d.Point',V_Q: '2d.Point',V_P: '2d.Point'] :
          ( ( V_s
            = ( '2d.polygon/1' @ ( 'cons/2' @ '2d.Point' @ V_P @ ( 'cons/2' @ '2d.Point' @ V_Q @ ( 'cons/2' @ '2d.Point' @ V_R @ ( 'cons/2' @ '2d.Point' @ V_S @ ( 'cons/2' @ '2d.Point' @ V_T @ ( 'nil/0' @ '2d.Point' ) ) ) ) ) ) ) )
          & ( '2d.is-regular-polygon/1' @ ( '2d.polygon/1' @ ( 'cons/2' @ '2d.Point' @ V_P @ ( 'cons/2' @ '2d.Point' @ V_Q @ ( 'cons/2' @ '2d.Point' @ V_R @ ( 'cons/2' @ '2d.Point' @ V_S @ ( 'cons/2' @ '2d.Point' @ V_T @ ( 'nil/0' @ '2d.Point' ) ) ) ) ) ) ) ) ) ) )).

thf('2d.regular-hexagon-type_axiom',axiom,(
    ! [V_s: '2d.Shape'] :
      ( ( '2d.regular-hexagon-type/1' @ V_s )
    <=> ? [V_U: '2d.Point',V_T: '2d.Point',V_S: '2d.Point',V_R: '2d.Point',V_Q: '2d.Point',V_P: '2d.Point'] :
          ( ( V_s
            = ( '2d.polygon/1' @ ( 'cons/2' @ '2d.Point' @ V_P @ ( 'cons/2' @ '2d.Point' @ V_Q @ ( 'cons/2' @ '2d.Point' @ V_R @ ( 'cons/2' @ '2d.Point' @ V_S @ ( 'cons/2' @ '2d.Point' @ V_T @ ( 'cons/2' @ '2d.Point' @ V_U @ ( 'nil/0' @ '2d.Point' ) ) ) ) ) ) ) ) )
          & ( '2d.is-regular-polygon/1' @ ( '2d.polygon/1' @ ( 'cons/2' @ '2d.Point' @ V_P @ ( 'cons/2' @ '2d.Point' @ V_Q @ ( 'cons/2' @ '2d.Point' @ V_R @ ( 'cons/2' @ '2d.Point' @ V_S @ ( 'cons/2' @ '2d.Point' @ V_T @ ( 'cons/2' @ '2d.Point' @ V_U @ ( 'nil/0' @ '2d.Point' ) ) ) ) ) ) ) ) ) ) ) )).

thf('2d.rhombus-type_axiom',axiom,(
    ! [V_s: '2d.Shape'] :
      ( ( '2d.rhombus-type/1' @ V_s )
    <=> ? [V_S: '2d.Point',V_R: '2d.Point',V_Q: '2d.Point',V_P: '2d.Point'] :
          ( ( V_s
            = ( '2d.square/4' @ V_P @ V_Q @ V_R @ V_S ) )
          & ( '2d.is-rhombus/4' @ V_P @ V_Q @ V_R @ V_S ) ) ) )).

thf('2d.trapezoid-type_axiom',axiom,(
    ! [V_s: '2d.Shape'] :
      ( ( '2d.trapezoid-type/1' @ V_s )
    <=> ? [V_S: '2d.Point',V_R: '2d.Point',V_Q: '2d.Point',V_P: '2d.Point'] :
          ( ( V_s
            = ( '2d.square/4' @ V_P @ V_Q @ V_R @ V_S ) )
          & ( '2d.is-trapezoid/4' @ V_P @ V_Q @ V_R @ V_S ) ) ) )).

thf('2d.parallelogram-type_axiom',axiom,(
    ! [V_s: '2d.Shape'] :
      ( ( '2d.parallelogram-type/1' @ V_s )
    <=> ? [V_S: '2d.Point',V_R: '2d.Point',V_Q: '2d.Point',V_P: '2d.Point'] :
          ( ( V_s
            = ( '2d.square/4' @ V_P @ V_Q @ V_R @ V_S ) )
          & ( '2d.is-parallelogram/4' @ V_P @ V_Q @ V_R @ V_S ) ) ) )).

thf('2d.def_seg_connects_points_axiom',axiom,(
    ! [V_Q1: '2d.Point',V_P1: '2d.Point',V_Q0: '2d.Point',V_P0: '2d.Point'] :
      ( ( '2d.segment-type/1' @ ( '2d.seg/2' @ V_P0 @ V_Q0 ) )
     => ( ( '2d.connect/2' @ ( '2d.seg/2' @ V_P0 @ V_Q0 ) @ ( 'cons/2' @ '2d.Point' @ V_P1 @ ( 'cons/2' @ '2d.Point' @ V_Q1 @ ( 'nil/0' @ '2d.Point' ) ) ) )
      <=> ( ( ( V_P0 = V_P1 )
            & ( V_Q0 = V_Q1 ) )
          | ( ( V_P0 = V_Q1 )
            & ( V_Q0 = V_P1 ) ) ) ) ) )).

thf('2d.def-two-sides-of-rectangle_axiom',axiom,(
    ! [V_S: '2d.Point',V_R: '2d.Point',V_Q: '2d.Point',V_P: '2d.Point'] :
      ( ( '2d.square-type/1' @ ( '2d.square/4' @ V_P @ V_Q @ V_R @ V_S ) )
     => ( ( '2d.two-sides-of-rectangle/1' @ ( '2d.square/4' @ V_P @ V_Q @ V_R @ V_S ) )
        = ( 'pair/2' @ '2d.Shape' @ '2d.Shape' @ ( '2d.seg/2' @ V_P @ V_Q ) @ ( '2d.seg/2' @ V_Q @ V_R ) ) ) ) )).

thf('2d.def_parallel_line_vs_line_axiom',axiom,(
    ! [V_s: '2d.Point',V_r: '2d.Point',V_q: '2d.Point',V_p: '2d.Point'] :
      ( ( ( '2d.line-type/1' @ ( '2d.line/2' @ V_p @ V_q ) )
        & ( '2d.line-type/1' @ ( '2d.line/2' @ V_r @ V_s ) ) )
     => ( ( '2d.parallel/2' @ ( '2d.line/2' @ V_p @ V_q ) @ ( '2d.line/2' @ V_r @ V_s ) )
      <=> ( '2d.vec-parallel/2' @ ( '2d.vec/2' @ V_p @ V_q ) @ ( '2d.vec/2' @ V_r @ V_s ) ) ) ) )).

thf('2d.def_parallel_seg_vs_seg_axiom',axiom,(
    ! [V_s: '2d.Point',V_r: '2d.Point',V_q: '2d.Point',V_p: '2d.Point'] :
      ( ( ( '2d.segment-type/1' @ ( '2d.seg/2' @ V_p @ V_q ) )
        & ( '2d.segment-type/1' @ ( '2d.seg/2' @ V_r @ V_s ) ) )
     => ( ( '2d.parallel/2' @ ( '2d.seg/2' @ V_p @ V_q ) @ ( '2d.seg/2' @ V_r @ V_s ) )
      <=> ( '2d.vec-parallel/2' @ ( '2d.vec/2' @ V_p @ V_q ) @ ( '2d.vec/2' @ V_r @ V_s ) ) ) ) )).

thf('2d.def_parallel_seg_vs_line_axiom',axiom,(
    ! [V_s: '2d.Point',V_r: '2d.Point',V_q: '2d.Point',V_p: '2d.Point'] :
      ( ( ( '2d.segment-type/1' @ ( '2d.seg/2' @ V_p @ V_q ) )
        & ( '2d.line-type/1' @ ( '2d.line/2' @ V_r @ V_s ) ) )
     => ( ( '2d.parallel/2' @ ( '2d.seg/2' @ V_p @ V_q ) @ ( '2d.line/2' @ V_r @ V_s ) )
      <=> ( '2d.vec-parallel/2' @ ( '2d.vec/2' @ V_p @ V_q ) @ ( '2d.vec/2' @ V_r @ V_s ) ) ) ) )).

thf('2d.def_parallel_line_vs_seg_axiom',axiom,(
    ! [V_s: '2d.Point',V_r: '2d.Point',V_q: '2d.Point',V_p: '2d.Point'] :
      ( ( ( '2d.line-type/1' @ ( '2d.line/2' @ V_p @ V_q ) )
        & ( '2d.segment-type/1' @ ( '2d.seg/2' @ V_r @ V_s ) ) )
     => ( ( '2d.parallel/2' @ ( '2d.line/2' @ V_p @ V_q ) @ ( '2d.seg/2' @ V_r @ V_s ) )
      <=> ( '2d.vec-parallel/2' @ ( '2d.vec/2' @ V_p @ V_q ) @ ( '2d.vec/2' @ V_r @ V_s ) ) ) ) )).

thf('2d.def-tangent-arity2_axiom',axiom,(
    ! [V_C1: '2d.Shape',V_C2: '2d.Shape'] :
      ( ( '2d.tangent/2' @ V_C1 @ V_C2 )
    <=> ? [V_P: '2d.Point'] :
          ( '2d.tangent/3' @ V_C1 @ V_C2 @ V_P ) ) )).

thf('2d.def-matrix-pow-0_axiom',axiom,(
    ! [V_m: '2d.Matrix'] :
      ( ( '2d.m^/2' @ V_m @ 0 )
      = '2d.identity-matrix/0' ) )).

thf('2d.def-matrix-pow-1_axiom',axiom,(
    ! [V_m: '2d.Matrix'] :
      ( ( '2d.m^/2' @ V_m @ 1 )
      = V_m ) )).

thf('2d.def-matrix-pow-2_axiom',axiom,(
    ! [V_m: '2d.Matrix'] :
      ( ( '2d.m^/2' @ V_m @ 2 )
      = ( '2d.m*/2' @ V_m @ V_m ) ) )).

thf('2d.def-matrix-pow-3_axiom',axiom,(
    ! [V_m: '2d.Matrix'] :
      ( ( '2d.m^/2' @ V_m @ 3 )
      = ( '2d.m*/2' @ V_m @ ( '2d.m*/2' @ V_m @ V_m ) ) ) )).

thf('2d.def-matrix-pow-4_axiom',axiom,(
    ! [V_m: '2d.Matrix'] :
      ( ( '2d.m^/2' @ V_m @ 4 )
      = ( '2d.m*/2' @ V_m @ ( '2d.m*/2' @ V_m @ ( '2d.m*/2' @ V_m @ V_m ) ) ) ) )).

thf('2d.def-matrix-pow-5_axiom',axiom,(
    ! [V_m: '2d.Matrix'] :
      ( ( '2d.m^/2' @ V_m @ 5 )
      = ( '2d.m*/2' @ V_m @ ( '2d.m*/2' @ V_m @ ( '2d.m*/2' @ V_m @ ( '2d.m*/2' @ V_m @ V_m ) ) ) ) ) )).

thf('2d.def-matrix-pow-6_axiom',axiom,(
    ! [V_m: '2d.Matrix'] :
      ( ( '2d.m^/2' @ V_m @ 6 )
      = ( '2d.m*/2' @ V_m @ ( '2d.m*/2' @ V_m @ ( '2d.m*/2' @ V_m @ ( '2d.m*/2' @ V_m @ ( '2d.m*/2' @ V_m @ V_m ) ) ) ) ) ) )).

thf('2d.def-matrix-sum_axiom',axiom,(
    ! [V_ms: ( 'ListOf' @ '2d.Matrix' )] :
      ( ( '2d.m-sum/1' @ V_ms )
      = ( 'foldr1/2' @ '2d.Matrix'
        @ ^ [V_m1: '2d.Matrix',V_m2: '2d.Matrix'] :
            ( '2d.m+/2' @ V_m1 @ V_m2 )
        @ V_ms ) ) )).

thf('2d.def-matrix-prod_axiom',axiom,(
    ! [V_ms: ( 'ListOf' @ '2d.Matrix' )] :
      ( ( '2d.m-prod/1' @ V_ms )
      = ( 'foldr1/2' @ '2d.Matrix'
        @ ^ [V_m1: '2d.Matrix',V_m2: '2d.Matrix'] :
            ( '2d.m*/2' @ V_m1 @ V_m2 )
        @ V_ms ) ) )).

thf('2d.def-is-inverse-matrix-of_axiom',axiom,(
    ! [V_m1: '2d.Matrix',V_m2: '2d.Matrix'] :
      ( ( '2d.is-inverse-of/2' @ V_m1 @ V_m2 )
    <=> ( ( '2d.m*/2' @ V_m1 @ V_m2 )
        = '2d.identity-matrix/0' ) ) )).

thf('2d.def-is-matrix_axiom',axiom,(
    ! [V_m: '2d.Matrix'] :
      ( '2d.is-matrix/1' @ V_m ) )).

thf('2d.def-boundary-of-triangle_axiom',axiom,(
    ! [V_R: '2d.Point',V_Q: '2d.Point',V_P: '2d.Point'] :
      ( ( '2d.triangle-type/1' @ ( '2d.triangle/3' @ V_P @ V_Q @ V_R ) )
     => ( ( '2d.boundary-of/1' @ ( '2d.triangle/3' @ V_P @ V_Q @ V_R ) )
        = ( '2d.union/1' @ ( 'cons/2' @ '2d.Shape' @ ( '2d.seg/2' @ V_P @ V_Q ) @ ( 'cons/2' @ '2d.Shape' @ ( '2d.seg/2' @ V_Q @ V_R ) @ ( 'cons/2' @ '2d.Shape' @ ( '2d.seg/2' @ V_R @ V_P ) @ ( 'nil/0' @ '2d.Shape' ) ) ) ) ) ) ) )).

thf('2d.def-boundary-of-square_axiom',axiom,(
    ! [V_S: '2d.Point',V_R: '2d.Point',V_Q: '2d.Point',V_P: '2d.Point'] :
      ( ( '2d.square-type/1' @ ( '2d.square/4' @ V_P @ V_Q @ V_R @ V_S ) )
     => ( ( '2d.boundary-of/1' @ ( '2d.square/4' @ V_P @ V_Q @ V_R @ V_S ) )
        = ( '2d.union/1' @ ( 'cons/2' @ '2d.Shape' @ ( '2d.seg/2' @ V_P @ V_Q ) @ ( 'cons/2' @ '2d.Shape' @ ( '2d.seg/2' @ V_Q @ V_R ) @ ( 'cons/2' @ '2d.Shape' @ ( '2d.seg/2' @ V_R @ V_S ) @ ( 'cons/2' @ '2d.Shape' @ ( '2d.seg/2' @ V_S @ V_P ) @ ( 'nil/0' @ '2d.Shape' ) ) ) ) ) ) ) ) )).

thf('2d.boundary-of-polygon-main/1_type',type,(
    '2d.boundary-of-polygon-main/1': ( 'ListOf' @ '2d.Point' ) > '2d.Shape' )).

thf('2d.def-boundary-of-polygon-main-basecase_axiom',axiom,(
    ! [V_p1: '2d.Point',V_p2: '2d.Point'] :
      ( ( '2d.boundary-of-polygon-main/1' @ ( 'cons/2' @ '2d.Point' @ V_p1 @ ( 'cons/2' @ '2d.Point' @ V_p2 @ ( 'nil/0' @ '2d.Point' ) ) ) )
      = ( '2d.seg/2' @ V_p1 @ V_p2 ) ) )).

thf('2d.def-boundary-of-polygon-main_axiom',axiom,(
    ! [V_p1: '2d.Point',V_p2: '2d.Point',V_p3: '2d.Point',V_Ps: ( 'ListOf' @ '2d.Point' )] :
      ( ( '2d.boundary-of-polygon-main/1' @ ( 'cons/2' @ '2d.Point' @ V_p1 @ ( 'cons/2' @ '2d.Point' @ V_p2 @ ( 'cons/2' @ '2d.Point' @ V_p3 @ V_Ps ) ) ) )
      = ( '2d.union/2' @ ( '2d.seg/2' @ V_p1 @ V_p2 ) @ ( '2d.boundary-of-polygon-main/1' @ ( 'cons/2' @ '2d.Point' @ V_p2 @ ( 'cons/2' @ '2d.Point' @ V_p3 @ V_Ps ) ) ) ) ) )).

thf('2d.def-boundary-of-polygon_axiom',axiom,(
    ! [V_Ps: ( 'ListOf' @ '2d.Point' )] :
      ( ( '2d.polygon-type/1' @ ( '2d.polygon/1' @ V_Ps ) )
     => ( ( '2d.boundary-of/1' @ ( '2d.polygon/1' @ V_Ps ) )
        = ( '2d.boundary-of-polygon-main/1' @ ( 'append/2' @ '2d.Point' @ V_Ps @ ( 'cons/2' @ '2d.Point' @ ( 'car/1' @ '2d.Point' @ V_Ps ) @ ( 'nil/0' @ '2d.Point' ) ) ) ) ) ) )).

thf('2d.def-translation-of-half-line_axiom',axiom,(
    ! [V_v: '2d.Vector',V_Q: '2d.Point',V_P: '2d.Point'] :
      ( ( '2d.half-line-type/1' @ ( '2d.half-line/2' @ V_P @ V_Q ) )
     => ( ( '2d.translate/2' @ ( '2d.half-line/2' @ V_P @ V_Q ) @ V_v )
        = ( '2d.half-line/2' @ ( '2d.vec-translate/2' @ V_P @ V_v ) @ ( '2d.vec-translate/2' @ V_Q @ V_v ) ) ) ) )).

thf('2d.def-translation-of-line_axiom',axiom,(
    ! [V_v: '2d.Vector',V_Q: '2d.Point',V_P: '2d.Point'] :
      ( ( '2d.line-type/1' @ ( '2d.line/2' @ V_P @ V_Q ) )
     => ( ( '2d.translate/2' @ ( '2d.line/2' @ V_P @ V_Q ) @ V_v )
        = ( '2d.line/2' @ ( '2d.vec-translate/2' @ V_P @ V_v ) @ ( '2d.vec-translate/2' @ V_Q @ V_v ) ) ) ) )).

thf('2d.def-translation-of-seg_axiom',axiom,(
    ! [V_v: '2d.Vector',V_Q: '2d.Point',V_P: '2d.Point'] :
      ( ( '2d.segment-type/1' @ ( '2d.seg/2' @ V_P @ V_Q ) )
     => ( ( '2d.translate/2' @ ( '2d.seg/2' @ V_P @ V_Q ) @ V_v )
        = ( '2d.seg/2' @ ( '2d.vec-translate/2' @ V_P @ V_v ) @ ( '2d.vec-translate/2' @ V_Q @ V_v ) ) ) ) )).

thf('2d.def-translation-of-triangle_axiom',axiom,(
    ! [V_v: '2d.Vector',V_R: '2d.Point',V_Q: '2d.Point',V_P: '2d.Point'] :
      ( ( '2d.triangle-type/1' @ ( '2d.triangle/3' @ V_P @ V_Q @ V_R ) )
     => ( ( '2d.translate/2' @ ( '2d.triangle/3' @ V_P @ V_Q @ V_R ) @ V_v )
        = ( '2d.triangle/3' @ ( '2d.vec-translate/2' @ V_P @ V_v ) @ ( '2d.vec-translate/2' @ V_Q @ V_v ) @ ( '2d.vec-translate/2' @ V_R @ V_v ) ) ) ) )).

thf('2d.def-translation-of-square_axiom',axiom,(
    ! [V_v: '2d.Vector',V_S: '2d.Point',V_R: '2d.Point',V_Q: '2d.Point',V_P: '2d.Point'] :
      ( ( '2d.square-type/1' @ ( '2d.square/4' @ V_P @ V_Q @ V_R @ V_S ) )
     => ( ( '2d.translate/2' @ ( '2d.square/4' @ V_P @ V_Q @ V_R @ V_S ) @ V_v )
        = ( '2d.square/4' @ ( '2d.vec-translate/2' @ V_P @ V_v ) @ ( '2d.vec-translate/2' @ V_Q @ V_v ) @ ( '2d.vec-translate/2' @ V_R @ V_v ) @ ( '2d.vec-translate/2' @ V_S @ V_v ) ) ) ) )).

thf('2d.def-translation-of-polygon_axiom',axiom,(
    ! [V_v: '2d.Vector',V_Ps: ( 'ListOf' @ '2d.Point' )] :
      ( ( '2d.polygon-type/1' @ ( '2d.polygon/1' @ V_Ps ) )
     => ( ( '2d.translate/2' @ ( '2d.polygon/1' @ V_Ps ) @ V_v )
        = ( '2d.polygon/1'
          @ ( 'map/2' @ '2d.Point' @ '2d.Point'
            @ ^ [V_p: '2d.Point'] :
                ( '2d.vec-translate/2' @ V_p @ V_v )
            @ V_Ps ) ) ) ) )).

%------------------------------------------------------------------------------------------
%----Axis of coordinates
%------------------------------------------------------------------------------------------
thf('2d.def-direction-of_axiom',axiom,(
    ! [V_v: '2d.Vector'] :
      ( ( '2d.direction-of/1' @ ( '2d.axis-along/1' @ V_v ) )
      = V_v ) )).

thf('2d.def_is_graph_axiom',axiom,(
    ! [V_g: '2d.Shape'] :
      ( '2d.is-graph/1' @ V_g ) )).

thf('2d.def_is_curve_axiom',axiom,(
    ! [V_c: '2d.Shape'] :
      ( '2d.is-curve/1' @ V_c ) )).

thf('2d.def_cpfun_to_cfun_2d_axiom',axiom,(
    ! [V_pf: ( '2d.Point' > $o )] :
      ( ( '2d.shape-of-cpfun/1' @ V_pf )
      = ( '2d.set-of-cfun/1'
        @ ^ [V_x: $real,V_y: $real] :
            ( V_pf @ ( '2d.point/2' @ V_x @ V_y ) ) ) ) )).

thf('2d.def_char_fun_of_set_of_cfun_2d_axiom',axiom,(
    ! [V_cfun: ( $real > $real > $o )] :
      ( ( '2d.char-fun-of/1' @ ( '2d.set-of-cfun/1' @ V_cfun ) )
      = ( ^ [V_P: '2d.Point'] :
            ( V_cfun @ ( '2d.x-coord/1' @ V_P ) @ ( '2d.y-coord/1' @ V_P ) ) ) ) )).

thf('2d.def_on_set_of_cfun_2d_axiom',axiom,(
    ! [V_p: '2d.Point',V_cfun: ( $real > $real > $o )] :
      ( ( '2d.on/2' @ V_p @ ( '2d.set-of-cfun/1' @ V_cfun ) )
    <=> ( V_cfun @ ( '2d.x-coord/1' @ V_p ) @ ( '2d.y-coord/1' @ V_p ) ) ) )).

thf('2d.def_common_noun_region_axiom',axiom,(
    ! [V_f: '2d.Shape'] :
      ( '2d.region/1' @ V_f ) )).

thf('2d.line-type_axiom',axiom,(
    ! [V_l: '2d.Shape'] :
      ( ( '2d.line-type/1' @ V_l )
    <=> ? [V_z: $real,V_y: $real,V_x: $real] :
          ( ( V_l
            = ( '2d.line2d/3' @ V_x @ V_y @ V_z ) )
          & ( ( V_y = 1.0 )
            | ( ( V_y = 0.0 )
              & ( V_x = 1.0 ) ) ) ) ) )).

thf('2d.circle-type_axiom',axiom,(
    ! [V_C: '2d.Shape'] :
      ( ( '2d.circle-type/1' @ V_C )
    <=> ? [V_r: $real,V_c: '2d.Point'] :
          ( ( V_C
            = ( '2d.circle/2' @ V_c @ V_r ) )
          & ( $less @ 0.0 @ V_r ) ) ) )).

thf('2d.disk-type_axiom',axiom,(
    ! [V_C: '2d.Shape'] :
      ( ( '2d.disk-type/1' @ V_C )
    <=> ? [V_r: $real,V_c: '2d.Point'] :
          ( ( V_C
            = ( '2d.disk/2' @ V_c @ V_r ) )
          & ( $less @ 0.0 @ V_r ) ) ) )).

thf('2d.semicircle-type_axiom',axiom,(
    ! [V_C: '2d.Shape'] :
      ( ( '2d.semicircle-type/1' @ V_C )
    <=> ? [V_ini: $real,V_r: $real,V_c: '2d.Point'] :
          ( ( V_C
            = ( '2d.semicircle/3' @ V_c @ V_r @ V_ini ) )
          & ( $less @ 0.0 @ V_r ) ) ) )).

thf('2d.arc-type_axiom',axiom,(
    ! [V_a: '2d.Shape'] :
      ( ( '2d.arc-type/1' @ V_a )
    <=> ? [V_ang2: $real,V_ang1: $real,V_r: $real,V_c: '2d.Point'] :
          ( ( V_a
            = ( '2d.arc/4' @ V_c @ V_r @ V_ang1 @ V_ang2 ) )
          & ( $less @ 0.0 @ V_r ) ) ) )).

thf('2d.circular-sector-type_axiom',axiom,(
    ! [V_cs: '2d.Shape'] :
      ( ( '2d.circular-sector-type/1' @ V_cs )
    <=> ? [V_ang2: $real,V_ang1: $real,V_r: $real,V_c: '2d.Point'] :
          ( ( V_cs
            = ( '2d.circular-sector/4' @ V_c @ V_r @ V_ang1 @ V_ang2 ) )
          & ( $less @ 0.0 @ V_r ) ) ) )).

thf('2d.fun_x_coord_axiom',axiom,(
    ! [V_x: $real,V_y: $real] :
      ( ( '2d.x-coord/1' @ ( '2d.point/2' @ V_x @ V_y ) )
      = V_x ) )).

thf('2d.fun_y_coord_axiom',axiom,(
    ! [V_x: $real,V_y: $real] :
      ( ( '2d.y-coord/1' @ ( '2d.point/2' @ V_x @ V_y ) )
      = V_y ) )).

thf('2d.def-coordinate-list-of-2d_axiom',axiom,(
    ! [V_x: $real,V_y: $real] :
      ( ( '2d.coordinate-list-of/1' @ ( '2d.point/2' @ V_x @ V_y ) )
      = ( 'cons/2' @ $real @ V_x @ ( 'cons/2' @ $real @ V_y @ ( 'nil/0' @ $real ) ) ) ) )).

thf('2d.fun_vec_x_coord_axiom',axiom,(
    ! [V_x: $real,V_y: $real] :
      ( ( '2d.vec-x-coord/1' @ ( '2d.vec2d/2' @ V_x @ V_y ) )
      = V_x ) )).

thf('2d.fun_vec_y_coord_axiom',axiom,(
    ! [V_x: $real,V_y: $real] :
      ( ( '2d.vec-y-coord/1' @ ( '2d.vec2d/2' @ V_x @ V_y ) )
      = V_y ) )).

thf('2d.def-component-list-of-2d_axiom',axiom,(
    ! [V_x: $real,V_y: $real] :
      ( ( '2d.component-list-of/1' @ ( '2d.vec2d/2' @ V_x @ V_y ) )
      = ( 'cons/2' @ $real @ V_x @ ( 'cons/2' @ $real @ V_y @ ( 'nil/0' @ $real ) ) ) ) )).

thf('2d.def_origin_2d_axiom',axiom,
    ( '2d.origin/0'
    = ( '2d.point/2' @ 0.0 @ 0.0 ) )).

thf('2d.def_distance_axiom',axiom,(
    ! [V_px: $real,V_py: $real,V_qx: $real,V_qy: $real] :
      ( ( '2d.distance/2' @ ( '2d.point/2' @ V_px @ V_py ) @ ( '2d.point/2' @ V_qx @ V_qy ) )
      = ( 'sqrt/1' @ ( '2d.distance^2/2' @ ( '2d.point/2' @ V_px @ V_py ) @ ( '2d.point/2' @ V_qx @ V_qy ) ) ) ) )).

thf('2d.def_distance_square_axiom',axiom,(
    ! [V_px: $real,V_py: $real,V_qx: $real,V_qy: $real] :
      ( ( '2d.distance^2/2' @ ( '2d.point/2' @ V_px @ V_py ) @ ( '2d.point/2' @ V_qx @ V_qy ) )
      = ( $sum @ ( '^/2' @ ( $difference @ V_px @ V_qx ) @ 2.0 ) @ ( '^/2' @ ( $difference @ V_py @ V_qy ) @ 2.0 ) ) ) )).

thf('2d.eq_point_axiom',axiom,(
    ! [V_px: $real,V_py: $real,V_qx: $real,V_qy: $real] :
      ( ( ( '2d.point/2' @ V_px @ V_py )
        = ( '2d.point/2' @ V_qx @ V_qy ) )
    <=> ( ( V_px = V_qx )
        & ( V_py = V_qy ) ) ) )).

thf('2d.eq_vector_axiom',axiom,(
    ! [V_px: $real,V_py: $real,V_qx: $real,V_qy: $real] :
      ( ( ( '2d.vec2d/2' @ V_px @ V_py )
        = ( '2d.vec2d/2' @ V_qx @ V_qy ) )
    <=> ( ( V_px = V_qx )
        & ( V_py = V_qy ) ) ) )).

thf('2d.def_vector_to_point_2d_axiom',axiom,(
    ! [V_x: $real,V_y: $real] :
      ( ( '2d.vec->point/1' @ ( '2d.vec2d/2' @ V_x @ V_y ) )
      = ( '2d.point/2' @ V_x @ V_y ) ) )).

thf('2d.def_vec_2d_axiom',axiom,(
    ! [V_px: $real,V_py: $real,V_qx: $real,V_qy: $real] :
      ( ( '2d.vec/2' @ ( '2d.point/2' @ V_px @ V_py ) @ ( '2d.point/2' @ V_qx @ V_qy ) )
      = ( '2d.vec2d/2' @ ( $difference @ V_qx @ V_px ) @ ( $difference @ V_qy @ V_py ) ) ) )).

thf('2d.def_vec_sum_axiom',axiom,(
    ! [V_px: $real,V_py: $real,V_qx: $real,V_qy: $real] :
      ( ( '2d.v+/2' @ ( '2d.vec2d/2' @ V_px @ V_py ) @ ( '2d.vec2d/2' @ V_qx @ V_qy ) )
      = ( '2d.vec2d/2' @ ( $sum @ V_px @ V_qx ) @ ( $sum @ V_py @ V_qy ) ) ) )).

thf('2d.def_vec_diff_axiom',axiom,(
    ! [V_px: $real,V_py: $real,V_qx: $real,V_qy: $real] :
      ( ( '2d.v-/2' @ ( '2d.vec2d/2' @ V_px @ V_py ) @ ( '2d.vec2d/2' @ V_qx @ V_qy ) )
      = ( '2d.vec2d/2' @ ( $difference @ V_px @ V_qx ) @ ( $difference @ V_py @ V_qy ) ) ) )).

thf('2d.def_scalar_vec_prod_axiom',axiom,(
    ! [V_a: $real,V_px: $real,V_py: $real] :
      ( ( '2d.sv*/2' @ V_a @ ( '2d.vec2d/2' @ V_px @ V_py ) )
      = ( '2d.vec2d/2' @ ( $product @ V_a @ V_px ) @ ( $product @ V_a @ V_py ) ) ) )).

thf('2d.def_inner_prod_axiom',axiom,(
    ! [V_px: $real,V_py: $real,V_qx: $real,V_qy: $real] :
      ( ( '2d.inner-prod/2' @ ( '2d.vec2d/2' @ V_px @ V_py ) @ ( '2d.vec2d/2' @ V_qx @ V_qy ) )
      = ( $sum @ ( $product @ V_px @ V_qx ) @ ( $product @ V_py @ V_qy ) ) ) )).

thf('2d.def_radius_axiom',axiom,(
    ! [V_px: $real,V_py: $real] :
      ( ( '2d.radius/1' @ ( '2d.vec2d/2' @ V_px @ V_py ) )
      = ( 'sqrt/1' @ ( $sum @ ( '^/2' @ V_px @ 2.0 ) @ ( '^/2' @ V_py @ 2.0 ) ) ) ) )).

thf('2d.def_point_rotate_around_origin_axiom',axiom,(
    ! [V_x: $real,V_y: $real,V_t: $real] :
      ( ( '2d.point-rotate-around-origin/2' @ ( '2d.point/2' @ V_x @ V_y ) @ V_t )
      = ( '2d.point/2' @ ( $difference @ ( $product @ V_x @ ( 'cos/1' @ V_t ) ) @ ( $product @ V_y @ ( 'sin/1' @ V_t ) ) ) @ ( $sum @ ( $product @ V_x @ ( 'sin/1' @ V_t ) ) @ ( $product @ V_y @ ( 'cos/1' @ V_t ) ) ) ) ) )).

thf('2d.def_point_rotate_around_axiom',axiom,(
    ! [V_px: $real,V_py: $real,V_p0x: $real,V_p0y: $real,V_t: $real] :
      ( ( '2d.point-rotate-around/3' @ ( '2d.point/2' @ V_px @ V_py ) @ ( '2d.point/2' @ V_p0x @ V_p0y ) @ V_t )
      = ( '2d.point/2' @ ( $sum @ ( '2d.x-coord/1' @ ( '2d.point-rotate-around-origin/2' @ ( '2d.point/2' @ ( $difference @ V_px @ V_p0x ) @ ( $difference @ V_py @ V_p0y ) ) @ V_t ) ) @ V_p0x ) @ ( $sum @ ( '2d.y-coord/1' @ ( '2d.point-rotate-around-origin/2' @ ( '2d.point/2' @ ( $difference @ V_px @ V_p0x ) @ ( $difference @ V_py @ V_p0y ) ) @ V_t ) ) @ V_p0y ) ) ) )).

thf('2d.def_vec_rotate_around_origin_axiom',axiom,(
    ! [V_x: $real,V_y: $real,V_t: $real] :
      ( ( '2d.vec-rotate-around-origin/2' @ ( '2d.vec2d/2' @ V_x @ V_y ) @ V_t )
      = ( '2d.vec2d/2' @ ( $difference @ ( $product @ V_x @ ( 'cos/1' @ V_t ) ) @ ( $product @ V_y @ ( 'sin/1' @ V_t ) ) ) @ ( $sum @ ( $product @ V_x @ ( 'sin/1' @ V_t ) ) @ ( $product @ V_y @ ( 'cos/1' @ V_t ) ) ) ) ) )).

thf('2d.def_coplanar_2d_axiom',axiom,(
    ! [V_p0: '2d.Point',V_p1: '2d.Point',V_p2: '2d.Point',V_p3: '2d.Point'] :
      ( ( '2d.coplanar/4' @ V_p0 @ V_p1 @ V_p2 @ V_p3 )
    <=> $true ) )).

thf('2d.def_points_coplanar_2d_axiom',axiom,(
    ! [V_points: ( 'ListOf' @ '2d.Point' )] :
      ( ( '2d.points-coplanar/1' @ V_points )
    <=> $true ) )).

thf('2d.def_extend_to_plane_2d_axiom',axiom,(
    ! [V_S: '2d.Shape'] :
      ( ( '2d.extend-to-plane/1' @ V_S )
      = '2d.xy-plane/0' ) )).

thf('2d.def_zero_vector_2d_axiom',axiom,
    ( '2d.zero-vector/0'
    = ( '2d.vec2d/2' @ 0.0 @ 0.0 ) )).

thf('2d.def_vec_parallel_2d_axiom',axiom,(
    ! [V_v: '2d.Vector',V_w: '2d.Vector'] :
      ( ( '2d.vec-parallel/2' @ V_v @ V_w )
    <=> ( 0.0
        = ( '2d.outer-prod/2' @ V_v @ V_w ) ) ) )).

thf('2d.def_line2d_axiom',axiom,(
    ! [V_u: $real,V_t: $real,V_s: $real] :
      ( ( '2d.line-type/1' @ ( '2d.line2d/3' @ V_s @ V_t @ V_u ) )
     => ( ( '2d.line2d/3' @ V_s @ V_t @ V_u )
        = ( 'if/3' @ '2d.Shape'
          @ ^ [V__: 'Unit'] : ( V_t != 0.0 )
          @ ( '2d.line/2' @ ( '2d.point/2' @ 0.0 @ ( $quotient @ V_u @ V_t ) ) @ ( '2d.point/2' @ 1.0 @ ( $quotient @ ( $difference @ V_u @ V_s ) @ V_t ) ) )
          @ ( '2d.line/2' @ ( '2d.point/2' @ ( $quotient @ V_u @ V_s ) @ 0.0 ) @ ( '2d.point/2' @ ( $quotient @ V_u @ V_s ) @ 1.0 ) ) ) ) ) )).

thf('2d.def_is_slope_of_axiom',axiom,(
    ! [V_q: '2d.Point',V_p: '2d.Point',V_m: $real] :
      ( ( '2d.line-type/1' @ ( '2d.line/2' @ V_p @ V_q ) )
     => ( ( '2d.is-slope-of/2' @ V_m @ ( '2d.line/2' @ V_p @ V_q ) )
      <=> ( ( ( '2d.x-coord/1' @ V_p )
           != ( '2d.x-coord/1' @ V_q ) )
          & ( ( $product @ V_m @ ( $difference @ ( '2d.x-coord/1' @ V_q ) @ ( '2d.x-coord/1' @ V_p ) ) )
            = ( $difference @ ( '2d.y-coord/1' @ V_q ) @ ( '2d.y-coord/1' @ V_p ) ) ) ) ) ) )).

thf('2d.def-is-slope-of-poly-fun-graph-1_axiom',axiom,(
    ! [V_a: $real,V_b: $real,V_s: $real] :
      ( ( '2d.is-slope-of/2' @ V_s @ ( '2d.graph-of/1' @ ( 'poly-fun/1' @ ( 'cons/2' @ $real @ V_b @ ( 'cons/2' @ $real @ V_a @ ( 'nil/0' @ $real ) ) ) ) ) )
    <=> ( V_s = V_a ) ) )).

thf('2d.def-is-slope-of-poly-fun-graph-0_axiom',axiom,(
    ! [V_b: $real,V_s: $real] :
      ( ( '2d.is-slope-of/2' @ V_s @ ( '2d.graph-of/1' @ ( 'poly-fun/1' @ ( 'cons/2' @ $real @ V_b @ ( 'nil/0' @ $real ) ) ) ) )
    <=> ( V_s = 0.0 ) ) )).

thf('2d.def-is-slope-of-poly-fun-graph-00_axiom',axiom,(
    ! [V_s: $real] :
      ( ( '2d.is-slope-of/2' @ V_s @ ( '2d.graph-of/1' @ ( 'poly-fun/1' @ ( 'nil/0' @ $real ) ) ) )
    <=> ( V_s = 0.0 ) ) )).

thf('2d.def_is_x_intercept_of_axiom',axiom,(
    ! [V_q: '2d.Point',V_p: '2d.Point',V_x0: $real] :
      ( ( '2d.line-type/1' @ ( '2d.line/2' @ V_p @ V_q ) )
     => ( ( '2d.is-x-intercept-of/2' @ V_x0 @ ( '2d.line/2' @ V_p @ V_q ) )
      <=> ? [V_m: $real] :
            ( ( '2d.is-slope-of/2' @ V_m @ ( '2d.line/2' @ V_p @ V_q ) )
            & ( ( '2d.y-coord/1' @ V_p )
              = ( $product @ V_m @ ( $difference @ ( '2d.x-coord/1' @ V_p ) @ V_x0 ) ) ) ) ) ) )).

thf('2d.def_is_y_intercept_of_axiom',axiom,(
    ! [V_q: '2d.Point',V_p: '2d.Point',V_y0: $real] :
      ( ( '2d.line-type/1' @ ( '2d.line/2' @ V_p @ V_q ) )
     => ( ( '2d.is-y-intercept-of/2' @ V_y0 @ ( '2d.line/2' @ V_p @ V_q ) )
      <=> ? [V_m: $real] :
            ( ( '2d.is-slope-of/2' @ V_m @ ( '2d.line/2' @ V_p @ V_q ) )
            & ( V_y0
              = ( $difference @ ( '2d.y-coord/1' @ V_p ) @ ( $product @ V_m @ ( '2d.x-coord/1' @ V_p ) ) ) ) ) ) ) )).

thf('2d.def_line_parameter_axiom',axiom,(
    ! [V_y1: $real,V_x1: $real,V_y0: $real,V_x0: $real] :
      ( ( '2d.line-type/1' @ ( '2d.line/2' @ ( '2d.point/2' @ V_x0 @ V_y0 ) @ ( '2d.point/2' @ V_x1 @ V_y1 ) ) )
     => ( ( '2d.line-parameter/1' @ ( '2d.line/2' @ ( '2d.point/2' @ V_x0 @ V_y0 ) @ ( '2d.point/2' @ V_x1 @ V_y1 ) ) )
        = ( 'if/3' @ ( 'ListOf' @ $real )
          @ ^ [V__: 'Unit'] : ( V_x0 = V_x1 )
          @ ( 'cons/2' @ $real @ -1.0 @ ( 'cons/2' @ $real @ 0.0 @ ( 'cons/2' @ $real @ V_x0 @ ( 'nil/0' @ $real ) ) ) )
          @ ( 'cons/2' @ $real @ ( $quotient @ ( $difference @ V_y1 @ V_y0 ) @ ( $difference @ V_x1 @ V_x0 ) ) @ ( 'cons/2' @ $real @ -1.0 @ ( 'cons/2' @ $real @ ( $difference @ V_y0 @ ( $product @ ( $quotient @ ( $difference @ V_y1 @ V_y0 ) @ ( $difference @ V_x1 @ V_x0 ) ) @ V_x0 ) ) @ ( 'nil/0' @ $real ) ) ) ) ) ) ) )).

thf('2d.def_shape_rotate_around_origin_line_axiom',axiom,(
    ! [V_t: $real,V_q: '2d.Point',V_p: '2d.Point'] :
      ( ( '2d.line-type/1' @ ( '2d.line/2' @ V_p @ V_q ) )
     => ( ( '2d.shape-rotate-around-origin/2' @ ( '2d.line/2' @ V_p @ V_q ) @ V_t )
        = ( '2d.line/2' @ ( '2d.point-rotate-around-origin/2' @ V_p @ V_t ) @ ( '2d.point-rotate-around-origin/2' @ V_q @ V_t ) ) ) ) )).

thf('2d.def_shape_rotate_around_line_axiom',axiom,(
    ! [V_t: $real,V_r: '2d.Point',V_q: '2d.Point',V_p: '2d.Point'] :
      ( ( '2d.line-type/1' @ ( '2d.line/2' @ V_p @ V_q ) )
     => ( ( '2d.shape-rotate-around/3' @ ( '2d.line/2' @ V_p @ V_q ) @ V_r @ V_t )
        = ( '2d.line/2' @ ( '2d.point-rotate-around/3' @ V_p @ V_r @ V_t ) @ ( '2d.point-rotate-around/3' @ V_q @ V_r @ V_t ) ) ) ) )).

thf('2d.def_shape_rotate_around_origin_general_case_axiom',axiom,(
    ! [V_S: '2d.Shape',V_t: $real] :
      ( ( '2d.shape-rotate-around-origin/2' @ V_S @ V_t )
      = ( '2d.shape-of-cpfun/1'
        @ ^ [V_p: '2d.Point'] :
            ( '2d.on/2' @ ( '2d.point-rotate-around-origin/2' @ V_p @ ( $uminus @ V_t ) ) @ V_S ) ) ) )).

thf('2d.def_point_shape_distance_line_2d_axiom',axiom,(
    ! [V_Q: '2d.Point',V_P: '2d.Point',V_R: '2d.Point'] :
      ( ( '2d.line-type/1' @ ( '2d.line/2' @ V_P @ V_Q ) )
     => ( ( '2d.point-shape-distance/2' @ V_R @ ( '2d.line/2' @ V_P @ V_Q ) )
        = ( 'sqrt/1' @ ( $difference @ ( '2d.distance^2/2' @ V_Q @ V_R ) @ ( $quotient @ ( '^/2' @ ( '2d.inner-prod/2' @ ( '2d.vec/2' @ V_P @ V_Q ) @ ( '2d.vec/2' @ V_Q @ V_R ) ) @ 2.0 ) @ ( '2d.distance^2/2' @ V_P @ V_Q ) ) ) ) ) ) )).

thf('2d.def_point_shape_square_distance_line_2d_axiom',axiom,(
    ! [V_B: '2d.Point',V_A: '2d.Point',V_P: '2d.Point'] :
      ( ( '2d.line-type/1' @ ( '2d.line/2' @ V_A @ V_B ) )
     => ( ( '2d.point-shape-distance^2/2' @ V_P @ ( '2d.line/2' @ V_A @ V_B ) )
        = ( $quotient @ ( '^/2' @ ( '2d.outer-prod/2' @ ( '2d.vec/2' @ V_A @ V_B ) @ ( '2d.vec/2' @ V_A @ V_P ) ) @ 2.0 ) @ ( '2d.distance^2/2' @ V_A @ V_B ) ) ) ) )).

thf('2d.def-point-shape-distance-generic_axiom',axiom,(
    ! [V_P: '2d.Point',V_S: '2d.Shape',V_d: $real] :
      ( ( V_d
        = ( '2d.point-shape-distance/2' @ V_P @ V_S ) )
    <=> ( ( $lesseq @ 0.0 @ V_d )
        & ( 'minimum/2'
          @ ( 'set-by-def/1' @ $real
            @ ^ [V_dd: $real] :
              ? [V_p: '2d.Point'] :
                ( ( '2d.on/2' @ V_p @ V_S )
                & ( V_dd
                  = ( '2d.distance^2/2' @ V_p @ V_P ) ) ) )
          @ ( '^/2' @ V_d @ 2.0 ) ) ) ) )).

thf('2d.def_line_line_distance_2d_axiom',axiom,(
    ! [V_q2: '2d.Point',V_q1: '2d.Point',V_p2: '2d.Point',V_p1: '2d.Point'] :
      ( ( ( '2d.line-type/1' @ ( '2d.line/2' @ V_p1 @ V_p2 ) )
        & ( '2d.line-type/1' @ ( '2d.line/2' @ V_q1 @ V_q2 ) ) )
     => ( ( '2d.line-line-distance/2' @ ( '2d.line/2' @ V_p1 @ V_p2 ) @ ( '2d.line/2' @ V_q1 @ V_q2 ) )
        = ( 'sqrt/1' @ ( '2d.line-line-distance^2/2' @ ( '2d.line/2' @ V_p1 @ V_p2 ) @ ( '2d.line/2' @ V_q1 @ V_q2 ) ) ) ) ) )).

thf('2d.def_line_line_square_distance_2d_axiom',axiom,(
    ! [V_q2: '2d.Point',V_q1: '2d.Point',V_p2: '2d.Point',V_p1: '2d.Point'] :
      ( ( ( '2d.line-type/1' @ ( '2d.line/2' @ V_p1 @ V_p2 ) )
        & ( '2d.line-type/1' @ ( '2d.line/2' @ V_q1 @ V_q2 ) ) )
     => ( ( '2d.line-line-distance^2/2' @ ( '2d.line/2' @ V_p1 @ V_p2 ) @ ( '2d.line/2' @ V_q1 @ V_q2 ) )
        = ( 'if/3' @ $real
          @ ^ [V__: 'Unit'] :
              ( '2d.parallel/2' @ ( '2d.line/2' @ V_p1 @ V_p2 ) @ ( '2d.line/2' @ V_q1 @ V_q2 ) )
          @ ( '2d.point-shape-distance^2/2' @ V_p1 @ ( '2d.line/2' @ V_q1 @ V_q2 ) )
          @ 0.0 ) ) ) )).

thf('2d.def_upper_area_of_axiom',axiom,(
    ! [V_l: '2d.Shape'] :
      ( ( '2d.upper-area-of/1' @ V_l )
      = ( '2d.set-of-cfun/1'
        @ ^ [V_x: $real,V_y: $real] :
            ( $less @ ( $sum @ ( $product @ ( 'car/1' @ $real @ ( '2d.line-parameter/1' @ V_l ) ) @ V_x ) @ ( $sum @ ( $product @ ( 'car/1' @ $real @ ( 'cdr/1' @ $real @ ( '2d.line-parameter/1' @ V_l ) ) ) @ V_y ) @ ( 'car/1' @ $real @ ( 'cdr/1' @ $real @ ( 'cdr/1' @ $real @ ( '2d.line-parameter/1' @ V_l ) ) ) ) ) ) @ 0.0 ) ) ) )).

thf('2d.def_lower_area_of_axiom',axiom,(
    ! [V_l: '2d.Shape'] :
      ( ( '2d.lower-area-of/1' @ V_l )
      = ( '2d.set-of-cfun/1'
        @ ^ [V_x: $real,V_y: $real] :
            ( $greater @ ( $sum @ ( $product @ ( 'car/1' @ $real @ ( '2d.line-parameter/1' @ V_l ) ) @ V_x ) @ ( $sum @ ( $product @ ( 'car/1' @ $real @ ( 'cdr/1' @ $real @ ( '2d.line-parameter/1' @ V_l ) ) ) @ V_y ) @ ( 'car/1' @ $real @ ( 'cdr/1' @ $real @ ( 'cdr/1' @ $real @ ( '2d.line-parameter/1' @ V_l ) ) ) ) ) ) @ 0.0 ) ) ) )).

thf('2d.def_x_axis_axiom',axiom,
    ( '2d.x-axis/0'
    = ( '2d.line/2' @ '2d.origin/0' @ ( '2d.point/2' @ 1.0 @ 0.0 ) ) )).

thf('2d.def_y_axis_axiom',axiom,
    ( '2d.y-axis/0'
    = ( '2d.line/2' @ '2d.origin/0' @ ( '2d.point/2' @ 0.0 @ 1.0 ) ) )).

thf('2d.def_xy_plane_2d_axiom',axiom,
    ( '2d.xy-plane/0'
    = ( '2d.shape-of-cpfun/1'
      @ ^ [V_p: '2d.Point'] : $true ) )).

thf('2d.def_is_excircle_of_axiom',axiom,(
    ! [V_P: '2d.Point',V_C: '2d.Point',V_B: '2d.Point',V_A: '2d.Point',V_r: $real,V_c: '2d.Point'] :
      ( ( ( '2d.circle-type/1' @ ( '2d.circle/2' @ V_c @ V_r ) )
        & ( '2d.triangle-type/1' @ ( '2d.triangle/3' @ V_A @ V_B @ V_C ) ) )
     => ( ( '2d.is-excircle-of/3' @ ( '2d.circle/2' @ V_c @ V_r ) @ ( '2d.triangle/3' @ V_A @ V_B @ V_C ) @ V_P )
      <=> ( ( ( V_P = V_A )
            & ( '2d.tangent/2' @ ( '2d.circle/2' @ V_c @ V_r ) @ ( '2d.half-line/2' @ V_B @ ( '2d.vec-translate/2' @ V_B @ ( '2d.vec/2' @ V_A @ V_B ) ) ) )
            & ( '2d.tangent/2' @ ( '2d.circle/2' @ V_c @ V_r ) @ ( '2d.half-line/2' @ V_C @ ( '2d.vec-translate/2' @ V_C @ ( '2d.vec/2' @ V_A @ V_C ) ) ) )
            & ( '2d.tangent/2' @ ( '2d.circle/2' @ V_c @ V_r ) @ ( '2d.line/2' @ V_B @ V_C ) ) )
          | ( ( V_P = V_B )
            & ( '2d.tangent/2' @ ( '2d.circle/2' @ V_c @ V_r ) @ ( '2d.half-line/2' @ V_C @ ( '2d.vec-translate/2' @ V_C @ ( '2d.vec/2' @ V_B @ V_C ) ) ) )
            & ( '2d.tangent/2' @ ( '2d.circle/2' @ V_c @ V_r ) @ ( '2d.half-line/2' @ V_A @ ( '2d.vec-translate/2' @ V_A @ ( '2d.vec/2' @ V_B @ V_A ) ) ) )
            & ( '2d.tangent/2' @ ( '2d.circle/2' @ V_c @ V_r ) @ ( '2d.line/2' @ V_C @ V_A ) ) )
          | ( ( V_P = V_C )
            & ( '2d.tangent/2' @ ( '2d.circle/2' @ V_c @ V_r ) @ ( '2d.half-line/2' @ V_A @ ( '2d.vec-translate/2' @ V_A @ ( '2d.vec/2' @ V_C @ V_A ) ) ) )
            & ( '2d.tangent/2' @ ( '2d.circle/2' @ V_c @ V_r ) @ ( '2d.half-line/2' @ V_B @ ( '2d.vec-translate/2' @ V_B @ ( '2d.vec/2' @ V_C @ V_B ) ) ) )
            & ( '2d.tangent/2' @ ( '2d.circle/2' @ V_c @ V_r ) @ ( '2d.line/2' @ V_A @ V_B ) ) ) ) ) ) )).

thf('2d.def_unit_circle_axiom',axiom,
    ( '2d.unit-circle/0'
    = ( '2d.circle/2' @ '2d.origin/0' @ 1.0 ) )).

thf('2d.def_is_radius_of_axiom',axiom,(
    ! [V_r: $real,V_c: '2d.Point',V_q: '2d.Point',V_p: '2d.Point'] :
      ( ( ( '2d.segment-type/1' @ ( '2d.seg/2' @ V_p @ V_q ) )
        & ( '2d.circle-type/1' @ ( '2d.circle/2' @ V_c @ V_r ) ) )
     => ( ( '2d.is-radius-of/2' @ ( '2d.seg/2' @ V_p @ V_q ) @ ( '2d.circle/2' @ V_c @ V_r ) )
      <=> ( ( ( V_p = V_c )
            & ( '2d.on/2' @ V_q @ ( '2d.circle/2' @ V_c @ V_r ) ) )
          | ( ( V_q = V_c )
            & ( '2d.on/2' @ V_p @ ( '2d.circle/2' @ V_c @ V_r ) ) ) ) ) ) )).

thf('2d.def_is_diameter_of_axiom',axiom,(
    ! [V_r: $real,V_c: '2d.Point',V_q: '2d.Point',V_p: '2d.Point'] :
      ( ( ( '2d.segment-type/1' @ ( '2d.seg/2' @ V_p @ V_q ) )
        & ( '2d.circle-type/1' @ ( '2d.circle/2' @ V_c @ V_r ) ) )
     => ( ( '2d.is-diameter-of/2' @ ( '2d.seg/2' @ V_p @ V_q ) @ ( '2d.circle/2' @ V_c @ V_r ) )
      <=> ( ( '2d.on/2' @ V_p @ ( '2d.circle/2' @ V_c @ V_r ) )
          & ( '2d.on/2' @ V_q @ ( '2d.circle/2' @ V_c @ V_r ) )
          & ( V_c
            = ( '2d.midpoint-of/2' @ V_p @ V_q ) ) ) ) ) )).

thf('2d.def_is_chord_of_axiom',axiom,(
    ! [V_r: $real,V_c: '2d.Point',V_q: '2d.Point',V_p: '2d.Point'] :
      ( ( ( '2d.segment-type/1' @ ( '2d.seg/2' @ V_p @ V_q ) )
        & ( '2d.circle-type/1' @ ( '2d.circle/2' @ V_c @ V_r ) ) )
     => ( ( '2d.is-chord-of/2' @ ( '2d.seg/2' @ V_p @ V_q ) @ ( '2d.circle/2' @ V_c @ V_r ) )
      <=> ( ( V_p != V_q )
          & ( '2d.on/2' @ V_p @ ( '2d.circle/2' @ V_c @ V_r ) )
          & ( '2d.on/2' @ V_q @ ( '2d.circle/2' @ V_c @ V_r ) ) ) ) ) )).

thf('2d.def_concircular_0_axiom',axiom,
    ( '2d.concircular/1' @ ( 'nil/0' @ '2d.Point' ) )).

thf('2d.def_concircular_1_axiom',axiom,(
    ! [V_p: '2d.Point'] :
      ( '2d.concircular/1' @ ( 'cons/2' @ '2d.Point' @ V_p @ ( 'nil/0' @ '2d.Point' ) ) ) )).

thf('2d.def_concircular_2_axiom',axiom,(
    ! [V_p0: '2d.Point',V_p1: '2d.Point'] :
      ( '2d.concircular/1' @ ( 'cons/2' @ '2d.Point' @ V_p0 @ ( 'cons/2' @ '2d.Point' @ V_p1 @ ( 'nil/0' @ '2d.Point' ) ) ) ) )).

thf('2d.def_concircular_3_axiom',axiom,(
    ! [V_p0: '2d.Point',V_p1: '2d.Point',V_p2: '2d.Point'] :
      ( ( '2d.concircular/1' @ ( 'cons/2' @ '2d.Point' @ V_p0 @ ( 'cons/2' @ '2d.Point' @ V_p1 @ ( 'cons/2' @ '2d.Point' @ V_p2 @ ( 'nil/0' @ '2d.Point' ) ) ) ) )
    <=> ( ( 'pairwise-distinct/1' @ '2d.Point' @ ( 'cons/2' @ '2d.Point' @ V_p0 @ ( 'cons/2' @ '2d.Point' @ V_p1 @ ( 'cons/2' @ '2d.Point' @ V_p2 @ ( 'nil/0' @ '2d.Point' ) ) ) ) )
       => ~ ( '2d.colinear/3' @ V_p0 @ V_p1 @ V_p2 ) ) ) )).

thf('2d.def_concircular_4_axiom',axiom,(
    ! [V_p0: '2d.Point',V_p1: '2d.Point',V_p2: '2d.Point',V_p3: '2d.Point'] :
      ( ( '2d.concircular/1' @ ( 'cons/2' @ '2d.Point' @ V_p0 @ ( 'cons/2' @ '2d.Point' @ V_p1 @ ( 'cons/2' @ '2d.Point' @ V_p2 @ ( 'cons/2' @ '2d.Point' @ V_p3 @ ( 'nil/0' @ '2d.Point' ) ) ) ) ) )
    <=> ( ( ~ ( 'pairwise-distinct/1' @ '2d.Point' @ ( 'cons/2' @ '2d.Point' @ V_p0 @ ( 'cons/2' @ '2d.Point' @ V_p1 @ ( 'cons/2' @ '2d.Point' @ V_p2 @ ( 'cons/2' @ '2d.Point' @ V_p3 @ ( 'nil/0' @ '2d.Point' ) ) ) ) ) )
         => ( '2d.concircular/1' @ ( 'remove-repetition/1' @ '2d.Point' @ ( 'cons/2' @ '2d.Point' @ V_p0 @ ( 'cons/2' @ '2d.Point' @ V_p1 @ ( 'cons/2' @ '2d.Point' @ V_p2 @ ( 'cons/2' @ '2d.Point' @ V_p3 @ ( 'nil/0' @ '2d.Point' ) ) ) ) ) ) ) )
        & ( ( 'pairwise-distinct/1' @ '2d.Point' @ ( 'cons/2' @ '2d.Point' @ V_p0 @ ( 'cons/2' @ '2d.Point' @ V_p1 @ ( 'cons/2' @ '2d.Point' @ V_p2 @ ( 'cons/2' @ '2d.Point' @ V_p3 @ ( 'nil/0' @ '2d.Point' ) ) ) ) ) )
         => ( ( ( '2d.points-same-side/2' @ ( '2d.line/2' @ V_p0 @ V_p1 ) @ ( 'cons/2' @ '2d.Point' @ V_p2 @ ( 'cons/2' @ '2d.Point' @ V_p3 @ ( 'nil/0' @ '2d.Point' ) ) ) )
              & ( '2d.same-angle/2' @ ( '2d.angle/3' @ V_p0 @ V_p2 @ V_p1 ) @ ( '2d.angle/3' @ V_p0 @ V_p3 @ V_p1 ) ) )
            | ( ( '2d.points-same-side/2' @ ( '2d.line/2' @ V_p0 @ V_p2 ) @ ( 'cons/2' @ '2d.Point' @ V_p1 @ ( 'cons/2' @ '2d.Point' @ V_p3 @ ( 'nil/0' @ '2d.Point' ) ) ) )
              & ( '2d.same-angle/2' @ ( '2d.angle/3' @ V_p0 @ V_p1 @ V_p2 ) @ ( '2d.angle/3' @ V_p0 @ V_p3 @ V_p2 ) ) ) ) ) ) ) )).

thf('2d.def_concircular_general_axiom',axiom,(
    ! [V_ps: ( 'ListOf' @ '2d.Point' )] :
      ( ( '2d.concircular/1' @ V_ps )
    <=> ? [V_c: '2d.Point',V_r: $real] :
          ( 'all/2' @ '2d.Point'
          @ ^ [V_p: '2d.Point'] :
              ( '2d.on/2' @ V_p @ ( '2d.circle/2' @ V_c @ V_r ) )
          @ V_ps ) ) )).

thf('2d.def_is_radius_of_disk_2d_axiom',axiom,(
    ! [V_r: $real,V_c: '2d.Point',V_q: '2d.Point',V_p: '2d.Point'] :
      ( ( ( '2d.segment-type/1' @ ( '2d.seg/2' @ V_p @ V_q ) )
        & ( '2d.disk-type/1' @ ( '2d.disk/2' @ V_c @ V_r ) ) )
     => ( ( '2d.is-radius-of/2' @ ( '2d.seg/2' @ V_p @ V_q ) @ ( '2d.disk/2' @ V_c @ V_r ) )
      <=> ( '2d.is-radius-of/2' @ ( '2d.seg/2' @ V_p @ V_q ) @ ( '2d.circle/2' @ V_c @ V_r ) ) ) ) )).

thf('2d.def_boundary_of_disk_2d_axiom',axiom,(
    ! [V_r: $real,V_c: '2d.Point'] :
      ( ( '2d.disk-type/1' @ ( '2d.disk/2' @ V_c @ V_r ) )
     => ( ( '2d.boundary-of/1' @ ( '2d.disk/2' @ V_c @ V_r ) )
        = ( '2d.circle/2' @ V_c @ V_r ) ) ) )).

thf('2d.def_arc_ini_point_2d_axiom',axiom,(
    ! [V_p: '2d.Point',V_r: $real,V_a: $real,V_b: $real] :
      ( ( '2d.arc-ini-point/1' @ ( '2d.arc/4' @ V_p @ V_r @ V_a @ V_b ) )
      = ( '2d.vec-translate/2' @ V_p @ ( '2d.vec2d/2' @ ( $product @ V_r @ ( 'cos/1' @ V_a ) ) @ ( $product @ V_r @ ( 'sin/1' @ V_a ) ) ) ) ) )).

thf('2d.def_arc_end_point_2d_axiom',axiom,(
    ! [V_p: '2d.Point',V_r: $real,V_a: $real,V_b: $real] :
      ( ( '2d.arc-end-point/1' @ ( '2d.arc/4' @ V_p @ V_r @ V_a @ V_b ) )
      = ( '2d.vec-translate/2' @ V_p @ ( '2d.vec2d/2' @ ( $product @ V_r @ ( 'cos/1' @ V_b ) ) @ ( $product @ V_r @ ( 'sin/1' @ V_b ) ) ) ) ) )).

thf('2d.def_arc_central_angle_2d_axiom',axiom,(
    ! [V_p: '2d.Point',V_r: $real,V_a: $real,V_b: $real] :
      ( ( '2d.arc-central-angle/1' @ ( '2d.arc/4' @ V_p @ V_r @ V_a @ V_b ) )
      = ( $difference @ V_b @ V_a ) ) )).

thf('2d.def_is_radius_of_arc_axiom',axiom,(
    ! [V_end: $real,V_ini: $real,V_r: $real,V_c: '2d.Point',V_q: '2d.Point',V_p: '2d.Point'] :
      ( ( '2d.segment-type/1' @ ( '2d.seg/2' @ V_p @ V_q ) )
     => ( ( '2d.is-radius-of/2' @ ( '2d.seg/2' @ V_p @ V_q ) @ ( '2d.arc/4' @ V_c @ V_r @ V_ini @ V_end ) )
      <=> ( ( ( V_p = V_c )
            & ( '2d.on/2' @ V_q @ ( '2d.arc/4' @ V_c @ V_r @ V_ini @ V_end ) ) )
          | ( ( V_q = V_c )
            & ( '2d.on/2' @ V_p @ ( '2d.arc/4' @ V_c @ V_r @ V_ini @ V_end ) ) ) ) ) ) )).

thf('2d.def_local_system_of_arc_2d_axiom',axiom,(
    ! [V_c: '2d.Point',V_r: $real,V_ini: $real,V_end: $real] :
      ( ( '2d.local-system-of/1' @ ( '2d.arc/4' @ V_c @ V_r @ V_ini @ V_end ) )
      = ( 'cons/2' @ '2d.Vector' @ ( '2d.normalize/1' @ ( '2d.vec/2' @ V_c @ ( '2d.arc-ini-point/1' @ ( '2d.arc/4' @ V_c @ V_r @ V_ini @ V_end ) ) ) ) @ ( 'cons/2' @ '2d.Vector' @ ( '2d.vec2d/2' @ ( $uminus @ ( '2d.vec-y-coord/1' @ ( '2d.normalize/1' @ ( '2d.vec/2' @ V_c @ ( '2d.arc-ini-point/1' @ ( '2d.arc/4' @ V_c @ V_r @ V_ini @ V_end ) ) ) ) ) ) @ ( '2d.vec-x-coord/1' @ ( '2d.normalize/1' @ ( '2d.vec/2' @ V_c @ ( '2d.arc-ini-point/1' @ ( '2d.arc/4' @ V_c @ V_r @ V_ini @ V_end ) ) ) ) ) ) @ ( 'nil/0' @ '2d.Vector' ) ) ) ) )).

thf('2d.def_local_system_of_minor_arc_by_three_points_2d_axiom',axiom,(
    ! [V_q: '2d.Point',V_p: '2d.Point',V_c: '2d.Point'] :
      ( ( '2d.arc-type/1' @ ( '2d.arc/3' @ V_c @ V_p @ V_q ) )
     => ( ( '2d.local-system-of/1' @ ( '2d.minor-arc/1' @ ( '2d.arc/3' @ V_c @ V_p @ V_q ) ) )
        = ( 'cons/2' @ '2d.Vector' @ ( '2d.normalize/1' @ ( '2d.vec/2' @ V_c @ V_p ) ) @ ( 'cons/2' @ '2d.Vector' @ ( '2d.normalize/1' @ ( '2d.v+/2' @ ( '2d.vec/2' @ V_c @ V_q ) @ ( '2d.sv*/2' @ ( $uminus @ ( '2d.inner-prod/2' @ ( '2d.vec/2' @ V_c @ V_q ) @ ( '2d.normalize/1' @ ( '2d.vec/2' @ V_c @ V_p ) ) ) ) @ ( '2d.normalize/1' @ ( '2d.vec/2' @ V_c @ V_p ) ) ) ) ) @ ( 'nil/0' @ '2d.Vector' ) ) ) ) ) )).

thf('2d.def_local_system_of_major_arc_by_three_points_2d_axiom',axiom,(
    ! [V_q: '2d.Point',V_p: '2d.Point',V_c: '2d.Point'] :
      ( ( '2d.arc-type/1' @ ( '2d.arc/3' @ V_c @ V_p @ V_q ) )
     => ( ( '2d.local-system-of/1' @ ( '2d.major-arc/1' @ ( '2d.arc/3' @ V_c @ V_p @ V_q ) ) )
        = ( 'cons/2' @ '2d.Vector' @ ( '2d.normalize/1' @ ( '2d.vec/2' @ V_c @ V_p ) ) @ ( 'cons/2' @ '2d.Vector' @ ( '2d.normalize/1' @ ( '2d.sv*/2' @ -1.0 @ ( '2d.v+/2' @ ( '2d.vec/2' @ V_c @ V_q ) @ ( '2d.sv*/2' @ ( $uminus @ ( '2d.inner-prod/2' @ ( '2d.vec/2' @ V_c @ V_q ) @ ( '2d.normalize/1' @ ( '2d.vec/2' @ V_c @ V_p ) ) ) ) @ ( '2d.normalize/1' @ ( '2d.vec/2' @ V_c @ V_p ) ) ) ) ) ) @ ( 'nil/0' @ '2d.Vector' ) ) ) ) ) )).

thf('2d.def_local_system_of_arc_by_three_points_2d_axiom',axiom,(
    ! [V_q: '2d.Point',V_p: '2d.Point',V_c: '2d.Point'] :
      ( ( '2d.arc-type/1' @ ( '2d.arc/3' @ V_c @ V_p @ V_q ) )
     => ( ( '2d.local-system-of/1' @ ( '2d.arc/3' @ V_c @ V_p @ V_q ) )
        = ( '2d.local-system-of/1' @ ( '2d.minor-arc/1' @ ( '2d.arc/3' @ V_c @ V_p @ V_q ) ) ) ) ) )).

thf('2d.def-connect-by-arc_axiom',axiom,(
    ! [V_pq: ( 'ListOf' @ '2d.Point' ),V_c: '2d.Point',V_r: $real,V_ini: $real,V_end: $real] :
      ( ( '2d.connect/2' @ ( '2d.arc/4' @ V_c @ V_r @ V_ini @ V_end ) @ V_pq )
    <=> ( ( V_pq
          = ( 'cons/2' @ '2d.Point' @ ( '2d.arc-ini-point/1' @ ( '2d.arc/4' @ V_c @ V_r @ V_ini @ V_end ) ) @ ( 'cons/2' @ '2d.Point' @ ( '2d.arc-end-point/1' @ ( '2d.arc/4' @ V_c @ V_r @ V_ini @ V_end ) ) @ ( 'nil/0' @ '2d.Point' ) ) ) )
        | ( V_pq
          = ( 'cons/2' @ '2d.Point' @ ( '2d.arc-end-point/1' @ ( '2d.arc/4' @ V_c @ V_r @ V_ini @ V_end ) ) @ ( 'cons/2' @ '2d.Point' @ ( '2d.arc-ini-point/1' @ ( '2d.arc/4' @ V_c @ V_r @ V_ini @ V_end ) ) @ ( 'nil/0' @ '2d.Point' ) ) ) ) ) ) )).

thf('2d.def_circular_sector_ini_point_2d_axiom',axiom,(
    ! [V_b: $real,V_a: $real,V_r: $real,V_p: '2d.Point'] :
      ( ( '2d.circular-sector-type/1' @ ( '2d.circular-sector/4' @ V_p @ V_r @ V_a @ V_b ) )
     => ( ( '2d.circular-sector-ini-point/1' @ ( '2d.circular-sector/4' @ V_p @ V_r @ V_a @ V_b ) )
        = ( '2d.arc-ini-point/1' @ ( '2d.arc/4' @ V_p @ V_r @ V_a @ V_b ) ) ) ) )).

thf('2d.def_circular_sector_end_point_2d_axiom',axiom,(
    ! [V_b: $real,V_a: $real,V_r: $real,V_p: '2d.Point'] :
      ( ( '2d.circular-sector-type/1' @ ( '2d.circular-sector/4' @ V_p @ V_r @ V_a @ V_b ) )
     => ( ( '2d.circular-sector-end-point/1' @ ( '2d.circular-sector/4' @ V_p @ V_r @ V_a @ V_b ) )
        = ( '2d.arc-end-point/1' @ ( '2d.arc/4' @ V_p @ V_r @ V_a @ V_b ) ) ) ) )).

thf('2d.def_is_radius_of_circular_sector_2d_axiom',axiom,(
    ! [V_end: $real,V_ini: $real,V_r: $real,V_c: '2d.Point',V_q: '2d.Point',V_p: '2d.Point'] :
      ( ( ( '2d.segment-type/1' @ ( '2d.seg/2' @ V_p @ V_q ) )
        & ( '2d.circular-sector-type/1' @ ( '2d.circular-sector/4' @ V_c @ V_r @ V_ini @ V_end ) ) )
     => ( ( '2d.is-radius-of/2' @ ( '2d.seg/2' @ V_p @ V_q ) @ ( '2d.circular-sector/4' @ V_c @ V_r @ V_ini @ V_end ) )
      <=> ( '2d.is-radius-of/2' @ ( '2d.seg/2' @ V_p @ V_q ) @ ( '2d.arc/4' @ V_c @ V_r @ V_ini @ V_end ) ) ) ) )).

thf('2d.def_arc_of_circular_sector_2d_axiom',axiom,(
    ! [V_end: $real,V_ini: $real,V_r: $real,V_c: '2d.Point'] :
      ( ( '2d.circular-sector-type/1' @ ( '2d.circular-sector/4' @ V_c @ V_r @ V_ini @ V_end ) )
     => ( ( '2d.arc-of/1' @ ( '2d.circular-sector/4' @ V_c @ V_r @ V_ini @ V_end ) )
        = ( '2d.arc/4' @ V_c @ V_r @ V_ini @ V_end ) ) ) )).

thf('2d.def_circular_sector_central_angle_2d_axiom',axiom,(
    ! [V_b: $real,V_a: $real,V_r: $real,V_p: '2d.Point'] :
      ( ( '2d.circular-sector-type/1' @ ( '2d.circular-sector/4' @ V_p @ V_r @ V_a @ V_b ) )
     => ( ( '2d.circular-sector-central-angle/1' @ ( '2d.circular-sector/4' @ V_p @ V_r @ V_a @ V_b ) )
        = ( '2d.arc-central-angle/1' @ ( '2d.arc/4' @ V_p @ V_r @ V_a @ V_b ) ) ) ) )).

thf('2d.def_sides_of_circular_sector_2d_axiom',axiom,(
    ! [V_end: $real,V_ini: $real,V_r: $real,V_c: '2d.Point'] :
      ( ( '2d.circular-sector-type/1' @ ( '2d.circular-sector/4' @ V_c @ V_r @ V_ini @ V_end ) )
     => ( ( '2d.sides-of/1' @ ( '2d.circular-sector/4' @ V_c @ V_r @ V_ini @ V_end ) )
        = ( '2d.sides-of/1' @ ( '2d.circular-sector-shape/1' @ ( '2d.circular-sector/4' @ V_c @ V_r @ V_ini @ V_end ) ) ) ) ) )).

thf('2d.def_local_system_of_circular_sector_2d_axiom',axiom,(
    ! [V_end: $real,V_ini: $real,V_r: $real,V_c: '2d.Point'] :
      ( ( '2d.circular-sector-type/1' @ ( '2d.circular-sector/4' @ V_c @ V_r @ V_ini @ V_end ) )
     => ( ( '2d.local-system-of/1' @ ( '2d.circular-sector/4' @ V_c @ V_r @ V_ini @ V_end ) )
        = ( '2d.local-system-of/1' @ ( '2d.arc/4' @ V_c @ V_r @ V_ini @ V_end ) ) ) ) )).

thf('2d.def-is-radius-of-semicircle_axiom',axiom,(
    ! [V_ini: $real,V_r: $real,V_c: '2d.Point',V_q: '2d.Point',V_p: '2d.Point'] :
      ( ( ( '2d.segment-type/1' @ ( '2d.seg/2' @ V_p @ V_q ) )
        & ( '2d.semicircle-type/1' @ ( '2d.semicircle/3' @ V_c @ V_r @ V_ini ) ) )
     => ( ( '2d.is-radius-of/2' @ ( '2d.seg/2' @ V_p @ V_q ) @ ( '2d.semicircle/3' @ V_c @ V_r @ V_ini ) )
      <=> ( ( ( V_p = V_c )
            & ( '2d.on/2' @ V_q @ ( '2d.arc/4' @ V_c @ V_r @ V_ini @ ( $sum @ V_ini @ 'Pi/0' ) ) ) )
          | ( ( V_q = V_c )
            & ( '2d.on/2' @ V_p @ ( '2d.arc/4' @ V_c @ V_r @ V_ini @ ( $sum @ V_ini @ 'Pi/0' ) ) ) ) ) ) ) )).

thf('2d.def-arc-of-semicircle_axiom',axiom,(
    ! [V_ini: $real,V_r: $real,V_c: '2d.Point'] :
      ( ( '2d.semicircle-type/1' @ ( '2d.semicircle/3' @ V_c @ V_r @ V_ini ) )
     => ( ( '2d.arc-of/1' @ ( '2d.semicircle/3' @ V_c @ V_r @ V_ini ) )
        = ( '2d.arc/4' @ V_c @ V_r @ V_ini @ ( $sum @ V_ini @ 'Pi/0' ) ) ) ) )).

thf('2d.def-center-of-semicircle_axiom',axiom,(
    ! [V_ini: $real,V_r: $real,V_c: '2d.Point'] :
      ( ( '2d.semicircle-type/1' @ ( '2d.semicircle/3' @ V_c @ V_r @ V_ini ) )
     => ( ( '2d.center-of/1' @ ( '2d.semicircle/3' @ V_c @ V_r @ V_ini ) )
        = V_c ) ) )).

thf('2d.def-radius-of-semicircle_axiom',axiom,(
    ! [V_ini: $real,V_r: $real,V_c: '2d.Point'] :
      ( ( '2d.semicircle-type/1' @ ( '2d.semicircle/3' @ V_c @ V_r @ V_ini ) )
     => ( ( '2d.radius-of/1' @ ( '2d.semicircle/3' @ V_c @ V_r @ V_ini ) )
        = V_r ) ) )).

thf('2d.def-is-diameter-of-semicircle_axiom',axiom,(
    ! [V_ini: $real,V_r: $real,V_c: '2d.Point',V_q: '2d.Point',V_p: '2d.Point'] :
      ( ( ( '2d.segment-type/1' @ ( '2d.seg/2' @ V_p @ V_q ) )
        & ( '2d.semicircle-type/1' @ ( '2d.semicircle/3' @ V_c @ V_r @ V_ini ) ) )
     => ( ( '2d.is-diameter-of/2' @ ( '2d.seg/2' @ V_p @ V_q ) @ ( '2d.semicircle/3' @ V_c @ V_r @ V_ini ) )
      <=> ( ( ( V_p
              = ( '2d.vec-translate/2' @ V_c @ ( '2d.sv*/2' @ V_r @ ( '2d.vec2d/2' @ ( 'cos/1' @ V_ini ) @ ( 'sin/1' @ V_ini ) ) ) ) )
            & ( V_q
              = ( '2d.vec-translate/2' @ V_c @ ( '2d.sv*/2' @ V_r @ ( '2d.vec2d/2' @ ( $uminus @ ( 'cos/1' @ V_ini ) ) @ ( $uminus @ ( 'sin/1' @ V_ini ) ) ) ) ) ) )
          | ( ( V_q
              = ( '2d.vec-translate/2' @ V_c @ ( '2d.sv*/2' @ V_r @ ( '2d.vec2d/2' @ ( 'cos/1' @ V_ini ) @ ( 'sin/1' @ V_ini ) ) ) ) )
            & ( V_p
              = ( '2d.vec-translate/2' @ V_c @ ( '2d.sv*/2' @ V_r @ ( '2d.vec2d/2' @ ( $uminus @ ( 'cos/1' @ V_ini ) ) @ ( $uminus @ ( 'sin/1' @ V_ini ) ) ) ) ) ) ) ) ) ) )).

thf('2d.ellipse-type_axiom',axiom,(
    ! [V_e: '2d.Shape'] :
      ( ( '2d.ellipse-type/1' @ V_e )
    <=> ? [V_ap: $real,V_f2: '2d.Point',V_f1: '2d.Point'] :
          ( ( V_e
            = ( '2d.ellipse/3' @ V_f1 @ V_f2 @ V_ap ) )
          & ( $less @ ( '2d.distance/2' @ V_f1 @ V_f2 ) @ V_ap ) ) ) )).

thf('2d.def-major-radius_axiom',axiom,(
    ! [V_ap: $real,V_f2: '2d.Point',V_f1: '2d.Point'] :
      ( ( '2d.ellipse-type/1' @ ( '2d.ellipse/3' @ V_f1 @ V_f2 @ V_ap ) )
     => ( ( '2d.major-radius/1' @ ( '2d.ellipse/3' @ V_f1 @ V_f2 @ V_ap ) )
        = ( $quotient @ V_ap @ 2.0 ) ) ) )).

thf('2d.def-minor-radius_axiom',axiom,(
    ! [V_ap: $real,V_f2: '2d.Point',V_f1: '2d.Point'] :
      ( ( '2d.ellipse-type/1' @ ( '2d.ellipse/3' @ V_f1 @ V_f2 @ V_ap ) )
     => ( ( '2d.minor-radius/1' @ ( '2d.ellipse/3' @ V_f1 @ V_f2 @ V_ap ) )
        = ( $quotient @ ( 'sqrt/1' @ ( $difference @ ( '^/2' @ V_ap @ 2.0 ) @ ( '2d.distance^2/2' @ V_f1 @ V_f2 ) ) ) @ 2.0 ) ) ) )).

thf('2d.def-on-ellipse_axiom',axiom,(
    ! [V_ap: $real,V_f2: '2d.Point',V_f1: '2d.Point',V_P: '2d.Point'] :
      ( ( '2d.ellipse-type/1' @ ( '2d.ellipse/3' @ V_f1 @ V_f2 @ V_ap ) )
     => ( ( '2d.on/2' @ V_P @ ( '2d.ellipse/3' @ V_f1 @ V_f2 @ V_ap ) )
      <=> ( ( $sum @ ( '2d.distance/2' @ V_P @ V_f1 ) @ ( '2d.distance/2' @ V_P @ V_f2 ) )
          = V_ap ) ) ) )).

thf('2d.def-is-axis-of_axiom',axiom,(
    ! [V_ap: $real,V_f2: '2d.Point',V_f1: '2d.Point',V_B: '2d.Point',V_A: '2d.Point'] :
      ( ( ( '2d.segment-type/1' @ ( '2d.seg/2' @ V_A @ V_B ) )
        & ( '2d.ellipse-type/1' @ ( '2d.ellipse/3' @ V_f1 @ V_f2 @ V_ap ) ) )
     => ( ( '2d.is-axis-of/2' @ ( '2d.seg/2' @ V_A @ V_B ) @ ( '2d.ellipse/3' @ V_f1 @ V_f2 @ V_ap ) )
      <=> ( ( ( '2d.seg/2' @ V_A @ V_B )
            = ( '2d.major-axis-of/1' @ ( '2d.ellipse/3' @ V_f1 @ V_f2 @ V_ap ) ) )
          | ( ( '2d.seg/2' @ V_A @ V_B )
            = ( '2d.minor-axis-of/1' @ ( '2d.ellipse/3' @ V_f1 @ V_f2 @ V_ap ) ) ) ) ) ) )).

thf('2d.def-major-axis-of_axiom',axiom,(
    ! [V_ap: $real,V_f2: '2d.Point',V_f1: '2d.Point'] :
      ( ( '2d.ellipse-type/1' @ ( '2d.ellipse/3' @ V_f1 @ V_f2 @ V_ap ) )
     => ( ( '2d.major-axis-of/1' @ ( '2d.ellipse/3' @ V_f1 @ V_f2 @ V_ap ) )
        = ( '2d.seg/2' @ ( '2d.vec-translate/2' @ ( '2d.midpoint-of/2' @ V_f1 @ V_f2 ) @ ( '2d.sv*/2' @ ( '2d.major-radius/1' @ ( '2d.ellipse/3' @ V_f1 @ V_f2 @ V_ap ) ) @ ( '2d.normalize/1' @ ( '2d.vec/2' @ V_f1 @ V_f2 ) ) ) ) @ ( '2d.vec-translate/2' @ ( '2d.midpoint-of/2' @ V_f1 @ V_f2 ) @ ( '2d.sv*/2' @ ( $uminus @ ( '2d.major-radius/1' @ ( '2d.ellipse/3' @ V_f1 @ V_f2 @ V_ap ) ) ) @ ( '2d.normalize/1' @ ( '2d.vec/2' @ V_f1 @ V_f2 ) ) ) ) ) ) ) )).

thf('2d.def-minor-axis-of_axiom',axiom,(
    ! [V_ap: $real,V_f2: '2d.Point',V_f1: '2d.Point'] :
      ( ( '2d.ellipse-type/1' @ ( '2d.ellipse/3' @ V_f1 @ V_f2 @ V_ap ) )
     => ( ( '2d.minor-axis-of/1' @ ( '2d.ellipse/3' @ V_f1 @ V_f2 @ V_ap ) )
        = ( '2d.seg/2' @ ( '2d.vec-translate/2' @ ( '2d.midpoint-of/2' @ V_f1 @ V_f2 ) @ ( '2d.sv*/2' @ ( '2d.minor-radius/1' @ ( '2d.ellipse/3' @ V_f1 @ V_f2 @ V_ap ) ) @ ( '2d.vec-rotate-around-origin/2' @ ( '2d.normalize/1' @ ( '2d.vec/2' @ V_f1 @ V_f2 ) ) @ ( $quotient @ 'Pi/0' @ 2.0 ) ) ) ) @ ( '2d.vec-translate/2' @ ( '2d.midpoint-of/2' @ V_f1 @ V_f2 ) @ ( '2d.sv*/2' @ ( $uminus @ ( '2d.minor-radius/1' @ ( '2d.ellipse/3' @ V_f1 @ V_f2 @ V_ap ) ) ) @ ( '2d.vec-rotate-around-origin/2' @ ( '2d.normalize/1' @ ( '2d.vec/2' @ V_f1 @ V_f2 ) ) @ ( $quotient @ 'Pi/0' @ 2.0 ) ) ) ) ) ) ) )).

thf('2d.def-center-of-ellipse_axiom',axiom,(
    ! [V_ap: $real,V_f2: '2d.Point',V_f1: '2d.Point'] :
      ( ( '2d.ellipse-type/1' @ ( '2d.ellipse/3' @ V_f1 @ V_f2 @ V_ap ) )
     => ( ( '2d.center-of/1' @ ( '2d.ellipse/3' @ V_f1 @ V_f2 @ V_ap ) )
        = ( '2d.midpoint-of/2' @ V_f1 @ V_f2 ) ) ) )).

thf('2d.hyperbola-type_axiom',axiom,(
    ! [V_h: '2d.Shape'] :
      ( ( '2d.hyperbola-type/1' @ V_h )
    <=> ? [V_ap: $real,V_f2: '2d.Point',V_f1: '2d.Point'] :
          ( ( V_f1 != V_f2 )
          & ( V_h
            = ( '2d.hyperbola/3' @ V_f1 @ V_f2 @ V_ap ) ) ) ) )).

thf('2d.def-on-hyperbolla_axiom',axiom,(
    ! [V_ap: $real,V_f2: '2d.Point',V_f1: '2d.Point',V_P: '2d.Point'] :
      ( ( '2d.hyperbola-type/1' @ ( '2d.hyperbola/3' @ V_f1 @ V_f2 @ V_ap ) )
     => ( ( '2d.on/2' @ V_P @ ( '2d.hyperbola/3' @ V_f1 @ V_f2 @ V_ap ) )
      <=> ( ( '^/2' @ ( $difference @ ( '2d.distance/2' @ V_P @ V_f1 ) @ ( '2d.distance/2' @ V_P @ V_f2 ) ) @ 2.0 )
          = ( '^/2' @ V_ap @ 2.0 ) ) ) ) )).

thf('2d.def-is-asymptote-of-hyperbola_axiom',axiom,(
    ! [V_ap: $real,V_f2: '2d.Point',V_f1: '2d.Point',V_q: '2d.Point',V_p: '2d.Point'] :
      ( ( ( '2d.line-type/1' @ ( '2d.line/2' @ V_p @ V_q ) )
        & ( '2d.hyperbola-type/1' @ ( '2d.hyperbola/3' @ V_f1 @ V_f2 @ V_ap ) ) )
     => ( ( '2d.is-asymptote-of/2' @ ( '2d.line/2' @ V_p @ V_q ) @ ( '2d.hyperbola/3' @ V_f1 @ V_f2 @ V_ap ) )
      <=> ( ( '2d.on/2' @ ( '2d.midpoint-of/2' @ V_f1 @ V_f2 ) @ ( '2d.line/2' @ V_p @ V_q ) )
          & ( V_p != V_q )
          & ? [V_A: '2d.Point',V_D: '2d.Point'] :
              ( ( '2d.on/2' @ V_A @ ( '2d.hyperbola/3' @ V_f1 @ V_f2 @ V_ap ) )
              & ( '2d.on/2' @ V_A @ ( '2d.line/2' @ V_f1 @ V_f2 ) )
              & ( V_D
               != ( '2d.midpoint-of/2' @ V_f1 @ V_f2 ) )
              & ( '2d.on/2' @ V_D @ ( '2d.line/2' @ V_p @ V_q ) )
              & ( '2d.perpendicular/2' @ ( '2d.line/2' @ V_D @ V_A ) @ ( '2d.line/2' @ V_f1 @ V_f2 ) )
              & ( ( '2d.distance^2/2' @ V_A @ V_D )
                = ( $quotient @ ( $difference @ ( '2d.distance^2/2' @ V_f1 @ V_f2 ) @ ( '^/2' @ V_ap @ 2.0 ) ) @ 4.0 ) ) ) ) ) ) )).

thf('2d.parabola-type_axiom',axiom,(
    ! [V_p: '2d.Shape'] :
      ( ( '2d.parabola-type/1' @ V_p )
    <=> ? [V_d: '2d.Point',V_f: '2d.Point'] :
          ( V_p
          = ( '2d.parabola/2' @ V_f @ V_d ) ) ) )).

thf('2d.def-directrix-parabola_axiom',axiom,(
    ! [V_dy: $real,V_dx: $real,V_fy: $real,V_fx: $real] :
      ( ( '2d.parabola-type/1' @ ( '2d.parabola/2' @ ( '2d.point/2' @ V_fx @ V_fy ) @ ( '2d.point/2' @ V_dx @ V_dy ) ) )
     => ( ( '2d.directrix/1' @ ( '2d.parabola/2' @ ( '2d.point/2' @ V_fx @ V_fy ) @ ( '2d.point/2' @ V_dx @ V_dy ) ) )
        = ( '2d.line/2' @ ( '2d.point/2' @ ( $sum @ V_dx @ ( $sum @ V_dy @ ( $uminus @ V_fy ) ) ) @ ( $sum @ V_dy @ ( $sum @ V_fx @ ( $uminus @ V_dx ) ) ) ) @ ( '2d.point/2' @ ( $sum @ V_dx @ ( $sum @ V_fy @ ( $uminus @ V_dy ) ) ) @ ( $sum @ V_dy @ ( $sum @ V_dx @ ( $uminus @ V_fx ) ) ) ) ) ) ) )).

thf('2d.def-on-parabola_axiom',axiom,(
    ! [V_d: '2d.Point',V_f: '2d.Point',V_P: '2d.Point'] :
      ( ( '2d.parabola-type/1' @ ( '2d.parabola/2' @ V_f @ V_d ) )
     => ( ( '2d.on/2' @ V_P @ ( '2d.parabola/2' @ V_f @ V_d ) )
      <=> ( ( '2d.distance/2' @ V_P @ V_f )
          = ( '2d.point-shape-distance/2' @ V_P @ ( '2d.directrix/1' @ ( '2d.parabola/2' @ V_f @ V_d ) ) ) ) ) ) )).

thf('2d.def_points_same_side_axiom',axiom,(
    ! [V_l: '2d.Shape',V_ps: ( 'ListOf' @ '2d.Point' )] :
      ( ( '2d.points-same-side/2' @ V_l @ V_ps )
    <=> ( ( 'all/2' @ '2d.Point'
          @ ^ [V_p_dot_0: '2d.Point'] :
              ( '2d.on/2' @ V_p_dot_0 @ ( '2d.upper-area-of/1' @ V_l ) )
          @ V_ps )
        | ( 'all/2' @ '2d.Point'
          @ ^ [V_p: '2d.Point'] :
              ( '2d.on/2' @ V_p @ ( '2d.lower-area-of/1' @ V_l ) )
          @ V_ps ) ) ) )).

thf('2d.def_points_opp_side_axiom',axiom,(
    ! [V_l: '2d.Shape',V_p: '2d.Point',V_q: '2d.Point'] :
      ( ( '2d.points-opp-side/3' @ V_l @ V_p @ V_q )
    <=> ( ( ( '2d.on/2' @ V_p @ ( '2d.upper-area-of/1' @ V_l ) )
          & ( '2d.on/2' @ V_q @ ( '2d.lower-area-of/1' @ V_l ) ) )
        | ( ( '2d.on/2' @ V_p @ ( '2d.lower-area-of/1' @ V_l ) )
          & ( '2d.on/2' @ V_q @ ( '2d.upper-area-of/1' @ V_l ) ) ) ) ) )).

thf('2d.def_shapes_same_side_axiom',axiom,(
    ! [V_l: '2d.Shape',V_lis: ( 'ListOf' @ '2d.Shape' )] :
      ( ( '2d.shapes-same-side/2' @ V_l @ V_lis )
    <=> ( ( 'all/2' @ '2d.Shape'
          @ ^ [V_x_dot_0: '2d.Shape'] :
              ( '2d.inside-of/2' @ V_x_dot_0 @ ( '2d.upper-area-of/1' @ V_l ) )
          @ V_lis )
        | ( 'all/2' @ '2d.Shape'
          @ ^ [V_x: '2d.Shape'] :
              ( '2d.inside-of/2' @ V_x @ ( '2d.lower-area-of/1' @ V_l ) )
          @ V_lis ) ) ) )).

thf('2d.def_point_inside_of_circle_2d_axiom',axiom,(
    ! [V_r: $real,V_c: '2d.Point',V_p: '2d.Point'] :
      ( ( '2d.circle-type/1' @ ( '2d.circle/2' @ V_c @ V_r ) )
     => ( ( '2d.point-inside-of/2' @ V_p @ ( '2d.circle/2' @ V_c @ V_r ) )
      <=> ( '2d.point-inside-of/2' @ V_p @ ( '2d.circle-shape/1' @ ( '2d.circle/2' @ V_c @ V_r ) ) ) ) ) )).

thf('2d.def_point_inside_of_disk_2d_axiom',axiom,(
    ! [V_r: $real,V_c: '2d.Point',V_p: '2d.Point'] :
      ( ( '2d.disk-type/1' @ ( '2d.disk/2' @ V_c @ V_r ) )
     => ( ( '2d.point-inside-of/2' @ V_p @ ( '2d.disk/2' @ V_c @ V_r ) )
      <=> ( '2d.point-inside-of/2' @ V_p @ ( '2d.disk-shape/1' @ ( '2d.disk/2' @ V_c @ V_r ) ) ) ) ) )).

thf('2d.def_point_inside_of_arc_2d_axiom',axiom,(
    ! [V_p: '2d.Point',V_c: '2d.Point',V_r: $real,V_ini: $real,V_end: $real] :
      ( ( '2d.point-inside-of/2' @ V_p @ ( '2d.arc/4' @ V_c @ V_r @ V_ini @ V_end ) )
    <=> ( '2d.point-inside-of/2' @ V_p @ ( '2d.arc-shape/1' @ ( '2d.arc/4' @ V_c @ V_r @ V_ini @ V_end ) ) ) ) )).

thf('2d.def_point_inside_of_circular_sector_2d_axiom',axiom,(
    ! [V_end: $real,V_ini: $real,V_r: $real,V_c: '2d.Point',V_p: '2d.Point'] :
      ( ( '2d.circular-sector-type/1' @ ( '2d.circular-sector/4' @ V_c @ V_r @ V_ini @ V_end ) )
     => ( ( '2d.point-inside-of/2' @ V_p @ ( '2d.circular-sector/4' @ V_c @ V_r @ V_ini @ V_end ) )
      <=> ( '2d.point-inside-of/2' @ V_p @ ( '2d.circular-sector-shape/1' @ ( '2d.circular-sector/4' @ V_c @ V_r @ V_ini @ V_end ) ) ) ) ) )).

thf('2d.def_point_inside_of_generic_shape_axiom',axiom,(
    ! [V_p: '2d.Point',V_f: ( $real > $real > $o )] :
      ( ( '2d.point-inside-of/2' @ V_p @ ( '2d.set-of-cfun/1' @ V_f ) )
    <=> ( '2d.on/2' @ V_p @ ( '2d.set-of-cfun/1' @ V_f ) ) ) )).

thf('2d.def_triangle_inside_of_half_plane0_axiom',axiom,(
    ! [V_l: '2d.Shape',V_c: '2d.Point',V_b: '2d.Point',V_a: '2d.Point'] :
      ( ( '2d.triangle-type/1' @ ( '2d.triangle/3' @ V_a @ V_b @ V_c ) )
     => ( ( '2d.inside-of/2' @ ( '2d.triangle/3' @ V_a @ V_b @ V_c ) @ ( '2d.upper-area-of/1' @ V_l ) )
      <=> ( ( '2d.on/2' @ V_a @ ( '2d.upper-area-of/1' @ V_l ) )
          & ( '2d.on/2' @ V_b @ ( '2d.upper-area-of/1' @ V_l ) )
          & ( '2d.on/2' @ V_c @ ( '2d.upper-area-of/1' @ V_l ) ) ) ) ) )).

thf('2d.def_triangle_inside_of_half_plane1_axiom',axiom,(
    ! [V_l: '2d.Shape',V_c: '2d.Point',V_b: '2d.Point',V_a: '2d.Point'] :
      ( ( '2d.triangle-type/1' @ ( '2d.triangle/3' @ V_a @ V_b @ V_c ) )
     => ( ( '2d.inside-of/2' @ ( '2d.triangle/3' @ V_a @ V_b @ V_c ) @ ( '2d.lower-area-of/1' @ V_l ) )
      <=> ( ( '2d.on/2' @ V_a @ ( '2d.lower-area-of/1' @ V_l ) )
          & ( '2d.on/2' @ V_b @ ( '2d.lower-area-of/1' @ V_l ) )
          & ( '2d.on/2' @ V_c @ ( '2d.lower-area-of/1' @ V_l ) ) ) ) ) )).

thf('2d.def_square_inside_of_half_plane0_axiom',axiom,(
    ! [V_l: '2d.Shape',V_d: '2d.Point',V_c: '2d.Point',V_b: '2d.Point',V_a: '2d.Point'] :
      ( ( '2d.square-type/1' @ ( '2d.square/4' @ V_a @ V_b @ V_c @ V_d ) )
     => ( ( '2d.inside-of/2' @ ( '2d.square/4' @ V_a @ V_b @ V_c @ V_d ) @ ( '2d.upper-area-of/1' @ V_l ) )
      <=> ( ( '2d.on/2' @ V_a @ ( '2d.upper-area-of/1' @ V_l ) )
          & ( '2d.on/2' @ V_b @ ( '2d.upper-area-of/1' @ V_l ) )
          & ( '2d.on/2' @ V_c @ ( '2d.upper-area-of/1' @ V_l ) )
          & ( '2d.on/2' @ V_d @ ( '2d.upper-area-of/1' @ V_l ) ) ) ) ) )).

thf('2d.def_square_inside_of_half_plane1_axiom',axiom,(
    ! [V_l: '2d.Shape',V_d: '2d.Point',V_c: '2d.Point',V_b: '2d.Point',V_a: '2d.Point'] :
      ( ( '2d.square-type/1' @ ( '2d.square/4' @ V_a @ V_b @ V_c @ V_d ) )
     => ( ( '2d.inside-of/2' @ ( '2d.square/4' @ V_a @ V_b @ V_c @ V_d ) @ ( '2d.lower-area-of/1' @ V_l ) )
      <=> ( ( '2d.on/2' @ V_a @ ( '2d.lower-area-of/1' @ V_l ) )
          & ( '2d.on/2' @ V_b @ ( '2d.lower-area-of/1' @ V_l ) )
          & ( '2d.on/2' @ V_c @ ( '2d.lower-area-of/1' @ V_l ) )
          & ( '2d.on/2' @ V_d @ ( '2d.lower-area-of/1' @ V_l ) ) ) ) ) )).

thf('2d.def_triangle_inside_of_triangle_axiom',axiom,(
    ! [V_R: '2d.Point',V_Q: '2d.Point',V_P: '2d.Point',V_r: '2d.Point',V_q: '2d.Point',V_p: '2d.Point'] :
      ( ( ( '2d.triangle-type/1' @ ( '2d.triangle/3' @ V_p @ V_q @ V_r ) )
        & ( '2d.triangle-type/1' @ ( '2d.triangle/3' @ V_P @ V_Q @ V_R ) ) )
     => ( ( '2d.inside-of/2' @ ( '2d.triangle/3' @ V_p @ V_q @ V_r ) @ ( '2d.triangle/3' @ V_P @ V_Q @ V_R ) )
      <=> ( ( '2d.point-inside-of/2' @ V_p @ ( '2d.triangle/3' @ V_P @ V_Q @ V_R ) )
          & ( '2d.point-inside-of/2' @ V_q @ ( '2d.triangle/3' @ V_P @ V_Q @ V_R ) )
          & ( '2d.point-inside-of/2' @ V_r @ ( '2d.triangle/3' @ V_P @ V_Q @ V_R ) ) ) ) ) )).

thf('2d.def-inside-of-generic-case_axiom',axiom,(
    ! [V_S1: '2d.Shape',V_S2: '2d.Shape'] :
      ( ( '2d.inside-of/2' @ V_S1 @ V_S2 )
    <=> ! [V_P: '2d.Point'] :
          ( ( '2d.point-inside-of/2' @ V_P @ V_S1 )
         => ( '2d.point-inside-of/2' @ V_P @ V_S2 ) ) ) )).

thf('2d.def_point_outside_of_axiom',axiom,(
    ! [V_r: $real,V_y0: $real,V_x0: $real,V_y: $real,V_x: $real] :
      ( ( '2d.circle-type/1' @ ( '2d.circle/2' @ ( '2d.point/2' @ V_x0 @ V_y0 ) @ V_r ) )
     => ( ( '2d.point-outside-of/2' @ ( '2d.point/2' @ V_x @ V_y ) @ ( '2d.circle/2' @ ( '2d.point/2' @ V_x0 @ V_y0 ) @ V_r ) )
      <=> ( $greater @ ( $sum @ ( $product @ ( $difference @ V_x @ V_x0 ) @ ( $difference @ V_x @ V_x0 ) ) @ ( $product @ ( $difference @ V_y @ V_y0 ) @ ( $difference @ V_y @ V_y0 ) ) ) @ ( $product @ V_r @ V_r ) ) ) ) )).

thf('2d.def-point-outside-of-triangle_axiom',axiom,(
    ! [V_C: '2d.Point',V_B: '2d.Point',V_A: '2d.Point',V_P: '2d.Point'] :
      ( ( '2d.triangle-type/1' @ ( '2d.triangle/3' @ V_A @ V_B @ V_C ) )
     => ( ( '2d.point-outside-of/2' @ V_P @ ( '2d.triangle/3' @ V_A @ V_B @ V_C ) )
      <=> ~ ( '2d.on/2' @ V_P @ ( '2d.triangle/3' @ V_A @ V_B @ V_C ) ) ) ) )).

thf('2d.def-point-outside-of-square_axiom',axiom,(
    ! [V_D: '2d.Point',V_C: '2d.Point',V_B: '2d.Point',V_A: '2d.Point',V_P: '2d.Point'] :
      ( ( '2d.square-type/1' @ ( '2d.square/4' @ V_A @ V_B @ V_C @ V_D ) )
     => ( ( '2d.point-outside-of/2' @ V_P @ ( '2d.square/4' @ V_A @ V_B @ V_C @ V_D ) )
      <=> ~ ( '2d.on/2' @ V_P @ ( '2d.square/4' @ V_A @ V_B @ V_C @ V_D ) ) ) ) )).

thf('2d.def_point_outside_of_generic_case_axiom',axiom,(
    ! [V_P: '2d.Point',V_S: '2d.Shape'] :
      ( ( '2d.point-outside-of/2' @ V_P @ V_S )
    <=> ( ~ ( '2d.on/2' @ V_P @ V_S )
        & ~ ( '2d.point-inside-of/2' @ V_P @ V_S ) ) ) )).

thf('2d.def-outside-of-generic-case_axiom',axiom,(
    ! [V_S1: '2d.Shape',V_S2: '2d.Shape'] :
      ( ( '2d.outside-of/2' @ V_S1 @ V_S2 )
    <=> ! [V_P: '2d.Point'] :
          ( ( '2d.on/2' @ V_P @ V_S1 )
         => ( '2d.point-outside-of/2' @ V_P @ V_S2 ) ) ) )).

thf('2d.def_polyline_2d_0_axiom',axiom,
    ( ( '2d.polyline/1' @ ( 'nil/0' @ '2d.Point' ) )
    = ( '2d.set-of-cfun/1'
      @ ^ [V_x: $real,V_y: $real] : $false ) )).

thf('2d.def_polyline_2d_1_axiom',axiom,(
    ! [V_p: '2d.Point'] :
      ( ( '2d.polyline/1' @ ( 'cons/2' @ '2d.Point' @ V_p @ ( 'nil/0' @ '2d.Point' ) ) )
      = ( '2d.set-of-cfun/1'
        @ ^ [V_x: $real,V_y: $real] :
            ( ( '2d.point/2' @ V_x @ V_y )
            = V_p ) ) ) )).

thf('2d.def_polyline_2d_2_axiom',axiom,(
    ! [V_p: '2d.Point',V_q: '2d.Point'] :
      ( ( '2d.polyline/1' @ ( 'cons/2' @ '2d.Point' @ V_p @ ( 'cons/2' @ '2d.Point' @ V_q @ ( 'nil/0' @ '2d.Point' ) ) ) )
      = ( '2d.set-of-cfun/1'
        @ ^ [V_x: $real,V_y: $real] :
            ( '2d.on/2' @ ( '2d.point/2' @ V_x @ V_y ) @ ( '2d.seg/2' @ V_p @ V_q ) ) ) ) )).

thf('2d.def_polyline_2d_2plus_axiom',axiom,(
    ! [V_p: '2d.Point',V_q: '2d.Point',V_ps: ( 'ListOf' @ '2d.Point' )] :
      ( ( '2d.polyline/1' @ ( 'cons/2' @ '2d.Point' @ V_p @ ( 'cons/2' @ '2d.Point' @ V_q @ V_ps ) ) )
      = ( '2d.set-of-cfun/1'
        @ ^ [V_x: $real,V_y: $real] :
            ( ( '2d.on/2' @ ( '2d.point/2' @ V_x @ V_y ) @ ( '2d.seg/2' @ V_p @ V_q ) )
            | ( '2d.on/2' @ ( '2d.point/2' @ V_x @ V_y ) @ ( '2d.polyline/1' @ ( 'cons/2' @ '2d.Point' @ V_q @ V_ps ) ) ) ) ) ) )).

thf('2d.def_parabola_symmetry_axis_axiom',axiom,(
    ! [V_a: $real,V_b: $real,V_c: $real,V_l: '2d.Shape'] :
      ( ( '2d.line-symmetry-shape/2' @ ( '2d.graph-of/1' @ ( 'poly-fun/1' @ ( 'cons/2' @ $real @ V_c @ ( 'cons/2' @ $real @ V_b @ ( 'cons/2' @ $real @ V_a @ ( 'nil/0' @ $real ) ) ) ) ) ) @ V_l )
    <=> ( ( ( V_a != 0.0 )
          & ( V_l
            = ( '2d.line2d/3' @ 1.0 @ 0.0 @ ( $uminus @ ( $quotient @ V_b @ ( $product @ 2.0 @ V_a ) ) ) ) ) )
        | ( ( V_a = 0.0 )
          & ? [V_u: $real] :
              ( V_l
              = ( '2d.line2d/3' @ -1.0 @ V_b @ V_u ) ) ) ) ) )).

thf('2d.def_line_symmetry_shape_axiom',axiom,(
    ! [V_f: 'R2R',V_l: '2d.Shape'] :
      ( ( '2d.line-symmetry-shape/2' @ ( '2d.graph-of/1' @ V_f ) @ V_l )
    <=> ! [V_P: '2d.Point'] :
          ( ( '2d.on/2' @ V_P @ ( '2d.graph-of/1' @ V_f ) )
         => ? [V_Q: '2d.Point'] :
              ( ( '2d.on/2' @ V_Q @ ( '2d.graph-of/1' @ V_f ) )
              & ( '2d.line-symmetry/3' @ V_P @ V_Q @ V_l ) ) ) ) )).

thf('2d.def_is_symmetry_axis_of_axiom',axiom,(
    ! [V_C: '2d.Shape',V_l: '2d.Shape'] :
      ( ( '2d.is-symmetry-axis-of/2' @ V_l @ V_C )
    <=> ( '2d.line-symmetry-shape/2' @ V_C @ V_l ) ) )).

thf('2d.def_not_parabola_symmetry_axis_axiom',axiom,(
    ! [V_cs: ( 'ListOf' @ $real ),V_l: '2d.Shape'] :
      ( ( '2d.line-symmetry-shape/2' @ ( '2d.graph-of/1' @ ( 'poly-fun/1' @ V_cs ) ) @ V_l )
    <=> ( '2d.line-symmetry-shape/2'
        @ ( '2d.graph-of/1'
          @ ( 'fun/1'
            @ ^ [V__x: $real] :
                ( 'poly-value/2' @ V_cs @ V__x ) ) )
        @ V_l ) ) )).

thf('2d.def_parabola_peak_axiom',axiom,(
    ! [V_a: $real,V_b: $real,V_c: $real,V_P: '2d.Point'] :
      ( ( '2d.is-vertex-of/2' @ V_P @ ( '2d.graph-of/1' @ ( 'poly-fun/1' @ ( 'cons/2' @ $real @ V_c @ ( 'cons/2' @ $real @ V_b @ ( 'cons/2' @ $real @ V_a @ ( 'nil/0' @ $real ) ) ) ) ) ) )
    <=> ( ( V_a != 0.0 )
        & ( V_P
          = ( '2d.point/2' @ ( $uminus @ ( $quotient @ V_b @ ( $product @ 2.0 @ V_a ) ) ) @ ( $difference @ V_c @ ( $quotient @ ( '^/2' @ V_b @ 2.0 ) @ ( $product @ 4.0 @ V_a ) ) ) ) ) ) ) )).

thf('2d.def_parabola_peak_2_axiom',axiom,(
    ! [V_P: '2d.Point',V_f: 'R2R'] :
      ( ( '2d.is-vertex-of/2' @ V_P @ ( '2d.graph-of/1' @ V_f ) )
    <=> ? [V_a: $real] :
          ( V_f
          = ( 'fun/1'
            @ ^ [V_x: $real] :
                ( $sum @ ( $product @ V_a @ ( '^/2' @ ( $difference @ V_x @ ( '2d.x-coord/1' @ V_P ) ) @ 2.0 ) ) @ ( '2d.y-coord/1' @ V_P ) ) ) ) ) )).

thf('2d.def_parabola_translate_axiom',axiom,(
    ! [V_a: $real,V_b: $real,V_c: $real,V_v: '2d.Vector',V_m: $real,V_g: '2d.Shape'] :
      ( ( '2d.translate/4' @ ( '2d.graph-of/1' @ ( 'poly-fun/1' @ ( 'cons/2' @ $real @ V_c @ ( 'cons/2' @ $real @ V_b @ ( 'cons/2' @ $real @ V_a @ ( 'nil/0' @ $real ) ) ) ) ) ) @ V_v @ V_m @ V_g )
    <=> ( V_g
        = ( '2d.graph-of/1' @ ( 'poly-fun/1' @ ( 'cons/2' @ $real @ ( $sum @ ( $product @ V_a @ ( '^/2' @ ( $product @ V_m @ ( $quotient @ ( '2d.vec-x-coord/1' @ V_v ) @ ( 'sqrt/1' @ ( $sum @ ( '^/2' @ ( '2d.vec-x-coord/1' @ V_v ) @ 2.0 ) @ ( '^/2' @ ( '2d.vec-y-coord/1' @ V_v ) @ 2.0 ) ) ) ) ) @ 2.0 ) ) @ ( $sum @ ( $uminus @ ( $product @ V_b @ ( $product @ V_m @ ( $quotient @ ( '2d.vec-x-coord/1' @ V_v ) @ ( 'sqrt/1' @ ( $sum @ ( '^/2' @ ( '2d.vec-x-coord/1' @ V_v ) @ 2.0 ) @ ( '^/2' @ ( '2d.vec-y-coord/1' @ V_v ) @ 2.0 ) ) ) ) ) ) ) @ ( $sum @ V_c @ ( $product @ V_m @ ( $quotient @ ( '2d.vec-y-coord/1' @ V_v ) @ ( 'sqrt/1' @ ( $sum @ ( '^/2' @ ( '2d.vec-x-coord/1' @ V_v ) @ 2.0 ) @ ( '^/2' @ ( '2d.vec-y-coord/1' @ V_v ) @ 2.0 ) ) ) ) ) ) ) ) @ ( 'cons/2' @ $real @ ( $difference @ V_b @ ( $product @ 2.0 @ ( $product @ V_a @ ( $product @ V_m @ ( $quotient @ ( '2d.vec-x-coord/1' @ V_v ) @ ( 'sqrt/1' @ ( $sum @ ( '^/2' @ ( '2d.vec-x-coord/1' @ V_v ) @ 2.0 ) @ ( '^/2' @ ( '2d.vec-y-coord/1' @ V_v ) @ 2.0 ) ) ) ) ) ) ) ) @ ( 'cons/2' @ $real @ V_a @ ( 'nil/0' @ $real ) ) ) ) ) ) ) ) )).

thf('2d.def_parabola_poly_axiom',axiom,(
    ! [V_c: $real,V_b: $real,V_a: $real] :
      ( ( '2d.parabola/1' @ ( '2d.graph-of/1' @ ( 'poly-fun/1' @ ( 'cons/2' @ $real @ V_c @ ( 'cons/2' @ $real @ V_b @ ( 'cons/2' @ $real @ V_a @ ( 'nil/0' @ $real ) ) ) ) ) ) )
    <=> ( V_a != 0.0 ) ) )).

thf('2d.def_parabola_fun_axiom',axiom,(
    ! [V_f: ( $real > $real )] :
      ( ( '2d.parabola/1' @ ( '2d.graph-of/1' @ ( 'fun/1' @ V_f ) ) )
    <=> ( ( ( 'deriv/1' @ ( 'deriv/1' @ V_f ) )
         != ( ^ [V_x_dot_0: $real] : 0.0 ) )
        & ( ( 'deriv/1' @ ( 'deriv/1' @ ( 'deriv/1' @ V_f ) ) )
          = ( ^ [V_x: $real] : 0.0 ) ) ) ) )).

thf('2d.def-parabola-generic_axiom',axiom,(
    ! [V_f: ( $real > $real > $o )] :
      ( '2d.parabola/1' @ ( '2d.set-of-cfun/1' @ V_f ) ) )).

thf('2d.def_graph_axiom',axiom,(
    ! [V_g: '2d.Shape'] :
      ( '2d.graph/1' @ V_g ) )).

thf('2d.def_translate1_axiom',axiom,(
    ! [V_v: '2d.Vector',V_m: $real,V_f1: 'R2R',V_g2: '2d.Shape'] :
      ( ( '2d.translate/4' @ ( '2d.graph-of/1' @ V_f1 ) @ V_v @ V_m @ V_g2 )
    <=> ( V_g2
        = ( '2d.graph-of/1'
          @ ( 'fun/1'
            @ ^ [V_x: $real] :
                ( $sum @ ( 'funapp/2' @ V_f1 @ ( $difference @ V_x @ ( $product @ V_m @ ( $quotient @ ( '2d.vec-x-coord/1' @ V_v ) @ ( 'sqrt/1' @ ( $sum @ ( '^/2' @ ( '2d.vec-x-coord/1' @ V_v ) @ 2.0 ) @ ( '^/2' @ ( '2d.vec-y-coord/1' @ V_v ) @ 2.0 ) ) ) ) ) ) ) @ ( $product @ V_m @ ( $quotient @ ( '2d.vec-y-coord/1' @ V_v ) @ ( 'sqrt/1' @ ( $sum @ ( '^/2' @ ( '2d.vec-x-coord/1' @ V_v ) @ 2.0 ) @ ( '^/2' @ ( '2d.vec-y-coord/1' @ V_v ) @ 2.0 ) ) ) ) ) ) ) ) ) ) )).

thf('2d.def_translate-general_axiom',axiom,(
    ! [V_v: '2d.Vector',V_m: $real,V_s1: '2d.Shape',V_s2: '2d.Shape'] :
      ( ( '2d.translate/4' @ V_s1 @ V_v @ V_m @ V_s2 )
    <=> ( V_s2
        = ( '2d.shape-of-cpfun/1'
          @ ^ [V_p: '2d.Point'] :
              ( '2d.on/2' @ ( '2d.point/2' @ ( $difference @ ( '2d.x-coord/1' @ V_p ) @ ( $product @ V_m @ ( $quotient @ ( '2d.vec-x-coord/1' @ V_v ) @ ( 'sqrt/1' @ ( $sum @ ( '^/2' @ ( '2d.vec-x-coord/1' @ V_v ) @ 2.0 ) @ ( '^/2' @ ( '2d.vec-y-coord/1' @ V_v ) @ 2.0 ) ) ) ) ) ) @ ( $difference @ ( '2d.y-coord/1' @ V_p ) @ ( $product @ V_m @ ( $quotient @ ( '2d.vec-y-coord/1' @ V_v ) @ ( 'sqrt/1' @ ( $sum @ ( '^/2' @ ( '2d.vec-x-coord/1' @ V_v ) @ 2.0 ) @ ( '^/2' @ ( '2d.vec-y-coord/1' @ V_v ) @ 2.0 ) ) ) ) ) ) ) @ V_s1 ) ) ) ) )).

thf('2d.def_intersect_axiom',axiom,(
    ! [V_f1: 'R2R',V_f2: 'R2R',V_p: '2d.Point'] :
      ( ( '2d.intersect/3' @ ( '2d.graph-of/1' @ V_f1 ) @ ( '2d.graph-of/1' @ V_f2 ) @ V_p )
    <=> ( ( ( '2d.y-coord/1' @ V_p )
          = ( 'funapp/2' @ V_f1 @ ( '2d.x-coord/1' @ V_p ) ) )
        & ( ( '2d.y-coord/1' @ V_p )
          = ( 'funapp/2' @ V_f2 @ ( '2d.x-coord/1' @ V_p ) ) ) ) ) )).

thf('2d.def_intersect_fun_graph_and_region_axiom',axiom,(
    ! [V_f: 'R2R',V_h: ( $real > $real > $o ),V_x: $real,V_y: $real] :
      ( ( '2d.intersect/3' @ ( '2d.graph-of/1' @ V_f ) @ ( '2d.set-of-cfun/1' @ V_h ) @ ( '2d.point/2' @ V_x @ V_y ) )
    <=> ( ( V_y
          = ( 'funapp/2' @ V_f @ V_x ) )
        & ( V_h @ V_x @ V_y ) ) ) )).

thf('2d.def_tangent_func_and_circle_axiom',axiom,(
    ! [V_py: $real,V_px: $real,V_r: $real,V_c: '2d.Point',V_f: 'R2R'] :
      ( ( '2d.circle-type/1' @ ( '2d.circle/2' @ V_c @ V_r ) )
     => ( ( '2d.tangent/3' @ ( '2d.graph-of/1' @ V_f ) @ ( '2d.circle/2' @ V_c @ V_r ) @ ( '2d.point/2' @ V_px @ V_py ) )
      <=> ( ( '2d.on/2' @ ( '2d.point/2' @ V_px @ V_py ) @ ( '2d.graph-of/1' @ V_f ) )
          & ( '2d.on/2' @ ( '2d.point/2' @ V_px @ V_py ) @ ( '2d.circle/2' @ V_c @ V_r ) )
          & ( ( 'funapp/2' @ ( 'derivative/1' @ V_f ) @ V_px )
            = ( $quotient @ ( $difference @ ( '2d.x-coord/1' @ V_c ) @ V_px ) @ ( $difference @ V_py @ ( '2d.y-coord/1' @ V_c ) ) ) ) ) ) ) )).

thf('2d.def_tangent_func_and_func_axiom',axiom,(
    ! [V_f: 'R2R',V_g: 'R2R',V_px: $real,V_py: $real] :
      ( ( '2d.tangent/3' @ ( '2d.graph-of/1' @ V_f ) @ ( '2d.graph-of/1' @ V_g ) @ ( '2d.point/2' @ V_px @ V_py ) )
    <=> ( ( '2d.on/2' @ ( '2d.point/2' @ V_px @ V_py ) @ ( '2d.graph-of/1' @ V_f ) )
        & ( '2d.on/2' @ ( '2d.point/2' @ V_px @ V_py ) @ ( '2d.graph-of/1' @ V_g ) )
        & ( ( 'funapp/2' @ ( 'derivative/1' @ V_f ) @ V_px )
          = ( 'funapp/2' @ ( 'derivative/1' @ V_g ) @ V_px ) ) ) ) )).

thf('2d.def_tangent_func_and_intersection_of_func_and_region_axiom',axiom,(
    ! [V_f: 'R2R',V_g: 'R2R',V_h: ( $real > $real > $o ),V_px: $real,V_py: $real] :
      ( ( '2d.tangent/3' @ ( '2d.graph-of/1' @ V_f ) @ ( '2d.intersection/2' @ ( '2d.graph-of/1' @ V_g ) @ ( '2d.set-of-cfun/1' @ V_h ) ) @ ( '2d.point/2' @ V_px @ V_py ) )
    <=> ( ( '2d.tangent/3' @ ( '2d.graph-of/1' @ V_f ) @ ( '2d.graph-of/1' @ V_g ) @ ( '2d.point/2' @ V_px @ V_py ) )
        & ( V_h @ V_px @ V_py ) ) ) )).

thf('2d.def_tangent_func_and_line_axiom',axiom,(
    ! [V_py: $real,V_px: $real,V_q: '2d.Point',V_p: '2d.Point',V_f: 'R2R'] :
      ( ( '2d.line-type/1' @ ( '2d.line/2' @ V_p @ V_q ) )
     => ( ( '2d.tangent/3' @ ( '2d.graph-of/1' @ V_f ) @ ( '2d.line/2' @ V_p @ V_q ) @ ( '2d.point/2' @ V_px @ V_py ) )
      <=> ( ( V_py
            = ( 'funapp/2' @ V_f @ V_px ) )
          & ( '2d.on/2' @ ( '2d.point/2' @ V_px @ V_py ) @ ( '2d.line/2' @ V_p @ V_q ) )
          & ( '2d.is-slope-of/2' @ ( 'funapp/2' @ ( 'derivative/1' @ V_f ) @ V_px ) @ ( '2d.line/2' @ V_p @ V_q ) ) ) ) ) )).

thf('2d.def_tangent_line_func_axiom',axiom,(
    ! [V_py: $real,V_px: $real,V_q: '2d.Point',V_p: '2d.Point',V_f: 'R2R'] :
      ( ( '2d.line-type/1' @ ( '2d.line/2' @ V_p @ V_q ) )
     => ( ( '2d.tangent/3' @ ( '2d.line/2' @ V_p @ V_q ) @ ( '2d.graph-of/1' @ V_f ) @ ( '2d.point/2' @ V_px @ V_py ) )
      <=> ( '2d.tangent/3' @ ( '2d.graph-of/1' @ V_f ) @ ( '2d.line/2' @ V_p @ V_q ) @ ( '2d.point/2' @ V_px @ V_py ) ) ) ) )).

thf('2d.def_tangent_line_and_circle_axiom',axiom,(
    ! [V_P: '2d.Point',V_r: $real,V_c: '2d.Point',V_q: '2d.Point',V_p: '2d.Point'] :
      ( ( ( '2d.line-type/1' @ ( '2d.line/2' @ V_p @ V_q ) )
        & ( '2d.circle-type/1' @ ( '2d.circle/2' @ V_c @ V_r ) ) )
     => ( ( '2d.tangent/3' @ ( '2d.line/2' @ V_p @ V_q ) @ ( '2d.circle/2' @ V_c @ V_r ) @ V_P )
      <=> ( ( '2d.on/2' @ V_P @ ( '2d.line/2' @ V_p @ V_q ) )
          & ( '2d.perpendicular/2' @ ( '2d.line/2' @ V_c @ V_P ) @ ( '2d.line/2' @ V_p @ V_q ) )
          & ( ( '2d.distance^2/2' @ V_P @ V_c )
            = ( '^/2' @ V_r @ 2.0 ) ) ) ) ) )).

thf('2d.def_tangent_circle_and_line_axiom',axiom,(
    ! [V_P: '2d.Point',V_r: $real,V_c: '2d.Point',V_q: '2d.Point',V_p: '2d.Point'] :
      ( ( ( '2d.circle-type/1' @ ( '2d.circle/2' @ V_c @ V_r ) )
        & ( '2d.line-type/1' @ ( '2d.line/2' @ V_p @ V_q ) ) )
     => ( ( '2d.tangent/3' @ ( '2d.circle/2' @ V_c @ V_r ) @ ( '2d.line/2' @ V_p @ V_q ) @ V_P )
      <=> ( '2d.tangent/3' @ ( '2d.line/2' @ V_p @ V_q ) @ ( '2d.circle/2' @ V_c @ V_r ) @ V_P ) ) ) )).

thf('2d.def_tangent_circle_and_seg_axiom',axiom,(
    ! [V_P: '2d.Point',V_r: $real,V_c: '2d.Point',V_q: '2d.Point',V_p: '2d.Point'] :
      ( ( ( '2d.circle-type/1' @ ( '2d.circle/2' @ V_c @ V_r ) )
        & ( '2d.segment-type/1' @ ( '2d.seg/2' @ V_p @ V_q ) ) )
     => ( ( '2d.tangent/3' @ ( '2d.circle/2' @ V_c @ V_r ) @ ( '2d.seg/2' @ V_p @ V_q ) @ V_P )
      <=> ( ( '2d.tangent/3' @ ( '2d.line/2' @ V_p @ V_q ) @ ( '2d.circle/2' @ V_c @ V_r ) @ V_P )
          & ( '2d.on/2' @ V_P @ ( '2d.seg/2' @ V_p @ V_q ) ) ) ) ) )).

thf('2d.def_tangent_seg_and_circle_axiom',axiom,(
    ! [V_P: '2d.Point',V_r: $real,V_c: '2d.Point',V_q: '2d.Point',V_p: '2d.Point'] :
      ( ( ( '2d.segment-type/1' @ ( '2d.seg/2' @ V_p @ V_q ) )
        & ( '2d.circle-type/1' @ ( '2d.circle/2' @ V_c @ V_r ) ) )
     => ( ( '2d.tangent/3' @ ( '2d.seg/2' @ V_p @ V_q ) @ ( '2d.circle/2' @ V_c @ V_r ) @ V_P )
      <=> ( '2d.tangent/3' @ ( '2d.circle/2' @ V_c @ V_r ) @ ( '2d.seg/2' @ V_p @ V_q ) @ V_P ) ) ) )).

thf('2d.def_tangent_circle_and_half_line_axiom',axiom,(
    ! [V_P: '2d.Point',V_r: $real,V_c: '2d.Point',V_q: '2d.Point',V_p: '2d.Point'] :
      ( ( ( '2d.circle-type/1' @ ( '2d.circle/2' @ V_c @ V_r ) )
        & ( '2d.half-line-type/1' @ ( '2d.half-line/2' @ V_p @ V_q ) ) )
     => ( ( '2d.tangent/3' @ ( '2d.circle/2' @ V_c @ V_r ) @ ( '2d.half-line/2' @ V_p @ V_q ) @ V_P )
      <=> ( ( '2d.tangent/3' @ ( '2d.line/2' @ V_p @ V_q ) @ ( '2d.circle/2' @ V_c @ V_r ) @ V_P )
          & ( '2d.on/2' @ V_P @ ( '2d.half-line/2' @ V_p @ V_q ) ) ) ) ) )).

thf('2d.def_tangent_half_line_and_circle_axiom',axiom,(
    ! [V_P: '2d.Point',V_r: $real,V_c: '2d.Point',V_q: '2d.Point',V_p: '2d.Point'] :
      ( ( ( '2d.half-line-type/1' @ ( '2d.half-line/2' @ V_p @ V_q ) )
        & ( '2d.circle-type/1' @ ( '2d.circle/2' @ V_c @ V_r ) ) )
     => ( ( '2d.tangent/3' @ ( '2d.half-line/2' @ V_p @ V_q ) @ ( '2d.circle/2' @ V_c @ V_r ) @ V_P )
      <=> ( '2d.tangent/3' @ ( '2d.circle/2' @ V_c @ V_r ) @ ( '2d.half-line/2' @ V_p @ V_q ) @ V_P ) ) ) )).

thf('2d.def-tangent-line-and-ellipse_axiom',axiom,(
    ! [V_C: '2d.Point',V_ap: $real,V_f2: '2d.Point',V_f1: '2d.Point',V_q: '2d.Point',V_p: '2d.Point'] :
      ( ( ( '2d.line-type/1' @ ( '2d.line/2' @ V_p @ V_q ) )
        & ( '2d.ellipse-type/1' @ ( '2d.ellipse/3' @ V_f1 @ V_f2 @ V_ap ) ) )
     => ( ( '2d.tangent/3' @ ( '2d.line/2' @ V_p @ V_q ) @ ( '2d.ellipse/3' @ V_f1 @ V_f2 @ V_ap ) @ V_C )
      <=> ( ( '2d.on/2' @ V_C @ ( '2d.ellipse/3' @ V_f1 @ V_f2 @ V_ap ) )
          & ( '2d.on/2' @ V_C @ ( '2d.line/2' @ V_p @ V_q ) )
          & ( ( ( '2d.on/2' @ V_C @ ( '2d.line/2' @ V_f1 @ V_f2 ) )
              & ( '2d.perpendicular/2' @ ( '2d.line/2' @ V_p @ V_q ) @ ( '2d.line/2' @ V_f1 @ V_f2 ) ) )
            | ( '2d.perpendicular/2' @ ( '2d.line/2' @ V_C @ ( '2d.midpoint-of/2' @ V_f1 @ V_f2 ) ) @ ( '2d.line/2' @ V_f1 @ V_f2 ) )
            | ? [V_A: '2d.Point',V_B: '2d.Point',V_G: '2d.Point',V_H: '2d.Point'] :
                ( ( '2d.perpendicular/2' @ ( '2d.line/2' @ V_B @ V_C ) @ ( '2d.line/2' @ V_f1 @ V_f2 ) )
                & ( '2d.on/2' @ V_B @ ( '2d.line/2' @ V_f1 @ V_f2 ) )
                & ( '2d.intersect/3' @ ( '2d.line/2' @ V_p @ V_q ) @ ( '2d.line/2' @ V_f1 @ V_f2 ) @ V_A )
                & ( V_G != V_H )
                & ( '2d.intersect/3' @ ( '2d.line/2' @ V_f1 @ V_f2 ) @ ( '2d.ellipse/3' @ V_f1 @ V_f2 @ V_ap ) @ V_G )
                & ( '2d.intersect/3' @ ( '2d.line/2' @ V_f1 @ V_f2 ) @ ( '2d.ellipse/3' @ V_f1 @ V_f2 @ V_ap ) @ V_H )
                & ( V_A != V_B )
                & ( ( $product @ ( '2d.distance^2/2' @ V_A @ V_G ) @ ( '2d.distance^2/2' @ V_B @ V_H ) )
                  = ( $product @ ( '2d.distance^2/2' @ V_A @ V_H ) @ ( '2d.distance^2/2' @ V_B @ V_G ) ) ) ) ) ) ) ) )).

thf('2d.def-tangent-ellipse-and-line_axiom',axiom,(
    ! [V_C: '2d.Point',V_ap: $real,V_f2: '2d.Point',V_f1: '2d.Point',V_q: '2d.Point',V_p: '2d.Point'] :
      ( ( ( '2d.ellipse-type/1' @ ( '2d.ellipse/3' @ V_f1 @ V_f2 @ V_ap ) )
        & ( '2d.line-type/1' @ ( '2d.line/2' @ V_p @ V_q ) ) )
     => ( ( '2d.tangent/3' @ ( '2d.ellipse/3' @ V_f1 @ V_f2 @ V_ap ) @ ( '2d.line/2' @ V_p @ V_q ) @ V_C )
      <=> ( '2d.tangent/2' @ ( '2d.line/2' @ V_p @ V_q ) @ ( '2d.ellipse/3' @ V_f1 @ V_f2 @ V_ap ) ) ) ) )).

thf('2d.def-tangent-line-and-hyperbola_axiom',axiom,(
    ! [V_C: '2d.Point',V_ap: $real,V_f2: '2d.Point',V_f1: '2d.Point',V_q: '2d.Point',V_p: '2d.Point'] :
      ( ( ( '2d.line-type/1' @ ( '2d.line/2' @ V_p @ V_q ) )
        & ( '2d.hyperbola-type/1' @ ( '2d.hyperbola/3' @ V_f1 @ V_f2 @ V_ap ) ) )
     => ( ( '2d.tangent/3' @ ( '2d.line/2' @ V_p @ V_q ) @ ( '2d.hyperbola/3' @ V_f1 @ V_f2 @ V_ap ) @ V_C )
      <=> ( ( '2d.on/2' @ V_C @ ( '2d.hyperbola/3' @ V_f1 @ V_f2 @ V_ap ) )
          & ( '2d.on/2' @ V_C @ ( '2d.line/2' @ V_p @ V_q ) )
          & ( ( '2d.is-angle-bisector/2' @ ( '2d.line/2' @ V_p @ V_q ) @ ( '2d.angle/3' @ V_f1 @ V_C @ V_f2 ) )
            | ( ( '2d.colinear/3' @ V_f1 @ V_f2 @ V_C )
              & ( '2d.perpendicular/2' @ ( '2d.line/2' @ V_p @ V_q ) @ ( '2d.line/2' @ V_f1 @ V_f2 ) ) ) ) ) ) ) )).

thf('2d.def-tangent-hyperbola-and-line_axiom',axiom,(
    ! [V_C: '2d.Point',V_ap: $real,V_f2: '2d.Point',V_f1: '2d.Point',V_q: '2d.Point',V_p: '2d.Point'] :
      ( ( ( '2d.hyperbola-type/1' @ ( '2d.hyperbola/3' @ V_f1 @ V_f2 @ V_ap ) )
        & ( '2d.line-type/1' @ ( '2d.line/2' @ V_p @ V_q ) ) )
     => ( ( '2d.tangent/3' @ ( '2d.hyperbola/3' @ V_f1 @ V_f2 @ V_ap ) @ ( '2d.line/2' @ V_p @ V_q ) @ V_C )
      <=> ( '2d.tangent/3' @ ( '2d.line/2' @ V_p @ V_q ) @ ( '2d.hyperbola/3' @ V_f1 @ V_f2 @ V_ap ) @ V_C ) ) ) )).

thf('2d.def-tangent-line-and-parabola_axiom',axiom,(
    ! [V_C: '2d.Point',V_d: '2d.Point',V_f: '2d.Point',V_q: '2d.Point',V_p: '2d.Point'] :
      ( ( ( '2d.line-type/1' @ ( '2d.line/2' @ V_p @ V_q ) )
        & ( '2d.parabola-type/1' @ ( '2d.parabola/2' @ V_f @ V_d ) ) )
     => ( ( '2d.tangent/3' @ ( '2d.line/2' @ V_p @ V_q ) @ ( '2d.parabola/2' @ V_f @ V_d ) @ V_C )
      <=> ( ( '2d.on/2' @ V_C @ ( '2d.parabola/2' @ V_f @ V_d ) )
          & ( V_p != V_q )
          & ( '2d.on/2' @ V_C @ ( '2d.line/2' @ V_p @ V_q ) )
          & ( ( ( V_C
                = ( '2d.midpoint-of/2' @ V_f @ V_d ) )
              & ( '2d.perpendicular/2' @ ( '2d.line/2' @ V_p @ V_q ) @ ( '2d.line/2' @ V_f @ V_d ) ) )
            | ? [V_D: '2d.Point',V_A: '2d.Point'] :
                ( ( '2d.on/2' @ V_D @ ( '2d.line/2' @ V_f @ V_d ) )
                & ( '2d.perpendicular/2' @ ( '2d.line/2' @ V_C @ V_D ) @ ( '2d.line/2' @ V_f @ V_d ) )
                & ( '2d.on/2' @ V_A @ ( '2d.line/2' @ V_f @ V_d ) )
                & ( V_D != V_A )
                & ( ( '2d.distance^2/2' @ V_D @ ( '2d.midpoint-of/2' @ V_f @ V_d ) )
                  = ( '2d.distance^2/2' @ V_A @ ( '2d.midpoint-of/2' @ V_f @ V_d ) ) )
                & ( ( '2d.line/2' @ V_p @ V_q )
                  = ( '2d.line/2' @ V_C @ V_A ) ) ) ) ) ) ) )).

thf('2d.def-tangent-parabola-and-line_axiom',axiom,(
    ! [V_C: '2d.Point',V_d: '2d.Point',V_f: '2d.Point',V_q: '2d.Point',V_p: '2d.Point'] :
      ( ( ( '2d.parabola-type/1' @ ( '2d.parabola/2' @ V_f @ V_d ) )
        & ( '2d.line-type/1' @ ( '2d.line/2' @ V_p @ V_q ) ) )
     => ( ( '2d.tangent/3' @ ( '2d.parabola/2' @ V_f @ V_d ) @ ( '2d.line/2' @ V_p @ V_q ) @ V_C )
      <=> ( '2d.tangent/3' @ ( '2d.line/2' @ V_p @ V_q ) @ ( '2d.parabola/2' @ V_f @ V_d ) @ V_C ) ) ) )).

thf('2d.def_tangent_line_and_graph_of_implicit_function_axiom',axiom,(
    ! [V_P: '2d.Point',V_f: ( $real > $real > $real ),V_q: '2d.Point',V_p: '2d.Point'] :
      ( ( '2d.line-type/1' @ ( '2d.line/2' @ V_p @ V_q ) )
     => ( ( '2d.tangent/3' @ ( '2d.line/2' @ V_p @ V_q ) @ ( '2d.graph-of-implicit-function/1' @ V_f ) @ V_P )
      <=> ( ( '2d.on/2' @ V_P @ ( '2d.line/2' @ V_p @ V_q ) )
          & ( '2d.on/2' @ V_P @ ( '2d.graph-of-implicit-function/1' @ V_f ) )
          & ( ( 0.0
             != ( ^ [V_x_dot_4: $real,V_y_dot_1: $real] :
                    ( 'deriv/1'
                    @ ^ [V_t_dot_1: $real] :
                        ( V_f @ V_t_dot_1 @ V_y_dot_1 )
                    @ V_x_dot_4 )
                @ ( '2d.x-coord/1' @ V_P )
                @ ( '2d.y-coord/1' @ V_P ) ) )
            | ( 0.0
             != ( ^ [V_x_dot_3: $real] :
                    ( 'deriv/1' @ ( V_f @ V_x_dot_3 ) )
                @ ( '2d.x-coord/1' @ V_P )
                @ ( '2d.y-coord/1' @ V_P ) ) ) )
          & ( ( '2d.line/2' @ V_p @ V_q )
            = ( '2d.line2d/3'
              @ ( ^ [V_x_dot_2: $real,V_y_dot_0: $real] :
                    ( 'deriv/1'
                    @ ^ [V_t_dot_0: $real] :
                        ( V_f @ V_t_dot_0 @ V_y_dot_0 )
                    @ V_x_dot_2 )
                @ ( '2d.x-coord/1' @ V_P )
                @ ( '2d.y-coord/1' @ V_P ) )
              @ ( ^ [V_x_dot_1: $real] :
                    ( 'deriv/1' @ ( V_f @ V_x_dot_1 ) )
                @ ( '2d.x-coord/1' @ V_P )
                @ ( '2d.y-coord/1' @ V_P ) )
              @ ( $sum
                @ ( $product
                  @ ( ^ [V_x_dot_0: $real,V_y: $real] :
                        ( 'deriv/1'
                        @ ^ [V_t: $real] :
                            ( V_f @ V_t @ V_y )
                        @ V_x_dot_0 )
                    @ ( '2d.x-coord/1' @ V_P )
                    @ ( '2d.y-coord/1' @ V_P ) )
                  @ ( '2d.x-coord/1' @ V_P ) )
                @ ( $product
                  @ ( ^ [V_x: $real] :
                        ( 'deriv/1' @ ( V_f @ V_x ) )
                    @ ( '2d.x-coord/1' @ V_P )
                    @ ( '2d.y-coord/1' @ V_P ) )
                  @ ( '2d.y-coord/1' @ V_P ) ) ) ) ) ) ) ) )).

thf('2d.def_tangent_graph_of_implicit_function_and_line_axiom',axiom,(
    ! [V_P: '2d.Point',V_f: ( $real > $real > $real ),V_q: '2d.Point',V_p: '2d.Point'] :
      ( ( '2d.line-type/1' @ ( '2d.line/2' @ V_p @ V_q ) )
     => ( ( '2d.tangent/3' @ ( '2d.graph-of-implicit-function/1' @ V_f ) @ ( '2d.line/2' @ V_p @ V_q ) @ V_P )
      <=> ( '2d.tangent/3' @ ( '2d.line/2' @ V_p @ V_q ) @ ( '2d.graph-of-implicit-function/1' @ V_f ) @ V_P ) ) ) )).

thf('2d.def_normal_line_of_curve_axiom',axiom,(
    ! [V_P: '2d.Point',V_f: 'R2R',V_q: '2d.Point',V_p: '2d.Point'] :
      ( ( '2d.line-type/1' @ ( '2d.line/2' @ V_p @ V_q ) )
     => ( ( '2d.normal-line/3' @ ( '2d.line/2' @ V_p @ V_q ) @ ( '2d.graph-of/1' @ V_f ) @ V_P )
      <=> ( ( '2d.on/2' @ V_P @ ( '2d.graph-of/1' @ V_f ) )
          & ( '2d.on/2' @ V_P @ ( '2d.line/2' @ V_p @ V_q ) )
          & ( ( '2d.is-slope-of/2' @ ( $quotient @ -1.0 @ ( 'funapp/2' @ ( 'derivative/1' @ V_f ) @ ( '2d.x-coord/1' @ V_P ) ) ) @ ( '2d.line/2' @ V_p @ V_q ) )
            | ( ( 0.0
                = ( 'funapp/2' @ ( 'derivative/1' @ V_f ) @ ( '2d.x-coord/1' @ V_P ) ) )
              & ( ( '2d.x-coord/1' @ V_p )
                = ( '2d.x-coord/1' @ V_q ) ) ) ) ) ) ) )).

thf('2d.def_is_inscribed_in_axiom',axiom,(
    ! [V_r2: $real,V_y2: $real,V_x2: $real,V_r1: $real,V_y1: $real,V_x1: $real] :
      ( ( ( '2d.circle-type/1' @ ( '2d.circle/2' @ ( '2d.point/2' @ V_x1 @ V_y1 ) @ V_r1 ) )
        & ( '2d.circle-type/1' @ ( '2d.circle/2' @ ( '2d.point/2' @ V_x2 @ V_y2 ) @ V_r2 ) ) )
     => ( ( '2d.is-inscribed-in/2' @ ( '2d.circle/2' @ ( '2d.point/2' @ V_x1 @ V_y1 ) @ V_r1 ) @ ( '2d.circle/2' @ ( '2d.point/2' @ V_x2 @ V_y2 ) @ V_r2 ) )
      <=> ( ( $less @ V_r1 @ V_r2 )
          & ( ( $sum @ ( '^/2' @ ( $difference @ V_x1 @ V_x2 ) @ 2.0 ) @ ( '^/2' @ ( $difference @ V_y1 @ V_y2 ) @ 2.0 ) )
            = ( '^/2' @ ( $difference @ V_r2 @ V_r1 ) @ 2.0 ) ) ) ) ) )).

thf('2d.def_triangle_is_inscribed_in_circle_axiom',axiom,(
    ! [V_z: '2d.Point',V_y: '2d.Point',V_x: '2d.Point',V_r: $real,V_c: '2d.Point'] :
      ( ( ( '2d.triangle-type/1' @ ( '2d.triangle/3' @ V_x @ V_y @ V_z ) )
        & ( '2d.circle-type/1' @ ( '2d.circle/2' @ V_c @ V_r ) ) )
     => ( ( '2d.is-inscribed-in/2' @ ( '2d.triangle/3' @ V_x @ V_y @ V_z ) @ ( '2d.circle/2' @ V_c @ V_r ) )
      <=> ( ( '2d.is-circumcenter-of/2' @ V_c @ ( '2d.triangle/3' @ V_x @ V_y @ V_z ) )
          & ( ( '^/2' @ V_r @ 2.0 )
            = ( '2d.distance^2/2' @ V_c @ V_x ) ) ) ) ) )).

thf('2d.def_is_inscribed_polygon_circle_axiom',axiom,(
    ! [V_ps: ( 'ListOf' @ '2d.Point' ),V_z: '2d.Point',V_y: '2d.Point',V_x: '2d.Point',V_r: $real,V_c: '2d.Point'] :
      ( ( ( '2d.polygon-type/1' @ ( '2d.polygon/1' @ ( 'cons/2' @ '2d.Point' @ V_x @ ( 'cons/2' @ '2d.Point' @ V_y @ ( 'cons/2' @ '2d.Point' @ V_z @ V_ps ) ) ) ) )
        & ( '2d.circle-type/1' @ ( '2d.circle/2' @ V_c @ V_r ) ) )
     => ( ( '2d.is-inscribed-in/2' @ ( '2d.polygon/1' @ ( 'cons/2' @ '2d.Point' @ V_x @ ( 'cons/2' @ '2d.Point' @ V_y @ ( 'cons/2' @ '2d.Point' @ V_z @ V_ps ) ) ) ) @ ( '2d.circle/2' @ V_c @ V_r ) )
      <=> ( ( '2d.is-inscribed-in/2' @ ( '2d.triangle/3' @ V_x @ V_y @ V_z ) @ ( '2d.circle/2' @ V_c @ V_r ) )
          & ( 'all/2' @ '2d.Point'
            @ ^ [V_p: '2d.Point'] :
                ( '2d.on/2' @ V_p @ ( '2d.circle/2' @ V_c @ V_r ) )
            @ V_ps ) ) ) ) )).

thf('2d.def_is_inscribed_square_circle_axiom',axiom,(
    ! [V_p4: '2d.Point',V_p3: '2d.Point',V_p2: '2d.Point',V_p1: '2d.Point',V_r: $real,V_c: '2d.Point'] :
      ( ( ( '2d.square-type/1' @ ( '2d.square/4' @ V_p1 @ V_p2 @ V_p3 @ V_p4 ) )
        & ( '2d.circle-type/1' @ ( '2d.circle/2' @ V_c @ V_r ) ) )
     => ( ( '2d.is-inscribed-in/2' @ ( '2d.square/4' @ V_p1 @ V_p2 @ V_p3 @ V_p4 ) @ ( '2d.circle/2' @ V_c @ V_r ) )
      <=> ( '2d.is-inscribed-in/2' @ ( '2d.polygon/1' @ ( 'cons/2' @ '2d.Point' @ V_p1 @ ( 'cons/2' @ '2d.Point' @ V_p2 @ ( 'cons/2' @ '2d.Point' @ V_p3 @ ( 'cons/2' @ '2d.Point' @ V_p4 @ ( 'nil/0' @ '2d.Point' ) ) ) ) ) ) @ ( '2d.circle/2' @ V_c @ V_r ) ) ) ) )).

thf('2d.def_circle_is_inscribed_in_triangle_axiom',axiom,(
    ! [V_z: '2d.Point',V_y: '2d.Point',V_x: '2d.Point',V_r: $real,V_c: '2d.Point'] :
      ( ( ( '2d.circle-type/1' @ ( '2d.circle/2' @ V_c @ V_r ) )
        & ( '2d.triangle-type/1' @ ( '2d.triangle/3' @ V_x @ V_y @ V_z ) ) )
     => ( ( '2d.is-inscribed-in/2' @ ( '2d.circle/2' @ V_c @ V_r ) @ ( '2d.triangle/3' @ V_x @ V_y @ V_z ) )
      <=> ( ( '2d.is-incenter-of/2' @ V_c @ ( '2d.triangle/3' @ V_x @ V_y @ V_z ) )
          & ( ( '^/2' @ V_r @ 2.0 )
            = ( '2d.point-shape-distance^2/2' @ V_c @ ( '2d.line/2' @ V_x @ V_y ) ) ) ) ) ) )).

thf('2d.def-circle-is-inscribed-in-polygon_axiom',axiom,(
    ! [V_ps: ( 'ListOf' @ '2d.Point' ),V_r: $real,V_c: '2d.Point'] :
      ( ( ( '2d.circle-type/1' @ ( '2d.circle/2' @ V_c @ V_r ) )
        & ( '2d.polygon-type/1' @ ( '2d.polygon/1' @ V_ps ) ) )
     => ( ( '2d.is-inscribed-in/2' @ ( '2d.circle/2' @ V_c @ V_r ) @ ( '2d.polygon/1' @ V_ps ) )
      <=> ( 'cyclic-all/2' @ '2d.Point'
          @ ^ [V_p0: '2d.Point',V_p1: '2d.Point',V_p2: '2d.Point'] :
              ( ( '^/2' @ V_r @ 2.0 )
              = ( '2d.point-shape-distance^2/2' @ V_c @ ( '2d.line/2' @ V_p1 @ V_p2 ) ) )
          @ V_ps ) ) ) )).

thf('2d.def_circle_is_inscribed_in_square_axiom',axiom,(
    ! [V_p3: '2d.Point',V_p2: '2d.Point',V_p1: '2d.Point',V_p0: '2d.Point',V_r: $real,V_c: '2d.Point'] :
      ( ( ( '2d.circle-type/1' @ ( '2d.circle/2' @ V_c @ V_r ) )
        & ( '2d.square-type/1' @ ( '2d.square/4' @ V_p0 @ V_p1 @ V_p2 @ V_p3 ) ) )
     => ( ( '2d.is-inscribed-in/2' @ ( '2d.circle/2' @ V_c @ V_r ) @ ( '2d.square/4' @ V_p0 @ V_p1 @ V_p2 @ V_p3 ) )
      <=> ( '2d.is-inscribed-in/2' @ ( '2d.circle/2' @ V_c @ V_r ) @ ( '2d.polygon/1' @ ( 'cons/2' @ '2d.Point' @ V_p0 @ ( 'cons/2' @ '2d.Point' @ V_p1 @ ( 'cons/2' @ '2d.Point' @ V_p2 @ ( 'cons/2' @ '2d.Point' @ V_p3 @ ( 'nil/0' @ '2d.Point' ) ) ) ) ) ) ) ) ) )).

thf('2d.def_square_is_inscribed_in_circle_axiom',axiom,(
    ! [V_w: '2d.Point',V_z: '2d.Point',V_y: '2d.Point',V_x: '2d.Point',V_r: $real,V_c: '2d.Point'] :
      ( ( ( '2d.square-type/1' @ ( '2d.square/4' @ V_x @ V_y @ V_z @ V_w ) )
        & ( '2d.circle-type/1' @ ( '2d.circle/2' @ V_c @ V_r ) ) )
     => ( ( '2d.is-inscribed-in/2' @ ( '2d.square/4' @ V_x @ V_y @ V_z @ V_w ) @ ( '2d.circle/2' @ V_c @ V_r ) )
      <=> ( ( '2d.on/2' @ V_x @ ( '2d.circle/2' @ V_c @ V_r ) )
          & ( '2d.on/2' @ V_y @ ( '2d.circle/2' @ V_c @ V_r ) )
          & ( '2d.on/2' @ V_z @ ( '2d.circle/2' @ V_c @ V_r ) )
          & ( '2d.on/2' @ V_w @ ( '2d.circle/2' @ V_c @ V_r ) ) ) ) ) )).

thf('2d.def_is_circumscribed_about_axiom',axiom,(
    ! [V_r2: $real,V_y2: $real,V_x2: $real,V_r1: $real,V_y1: $real,V_x1: $real] :
      ( ( ( '2d.circle-type/1' @ ( '2d.circle/2' @ ( '2d.point/2' @ V_x1 @ V_y1 ) @ V_r1 ) )
        & ( '2d.circle-type/1' @ ( '2d.circle/2' @ ( '2d.point/2' @ V_x2 @ V_y2 ) @ V_r2 ) ) )
     => ( ( '2d.is-circumscribed-about/2' @ ( '2d.circle/2' @ ( '2d.point/2' @ V_x1 @ V_y1 ) @ V_r1 ) @ ( '2d.circle/2' @ ( '2d.point/2' @ V_x2 @ V_y2 ) @ V_r2 ) )
      <=> ( ( $sum @ ( '^/2' @ ( $difference @ V_x1 @ V_x2 ) @ 2.0 ) @ ( '^/2' @ ( $difference @ V_y1 @ V_y2 ) @ 2.0 ) )
          = ( '^/2' @ ( $sum @ V_r1 @ V_r2 ) @ 2.0 ) ) ) ) )).

thf('2d.def_intersect_func_circle_axiom',axiom,(
    ! [V_y: $real,V_x: $real,V_r: $real,V_cy: $real,V_cx: $real,V_f: 'R2R'] :
      ( ( '2d.circle-type/1' @ ( '2d.circle/2' @ ( '2d.point/2' @ V_cx @ V_cy ) @ V_r ) )
     => ( ( '2d.intersect/3' @ ( '2d.graph-of/1' @ V_f ) @ ( '2d.circle/2' @ ( '2d.point/2' @ V_cx @ V_cy ) @ V_r ) @ ( '2d.point/2' @ V_x @ V_y ) )
      <=> ( ( V_y
            = ( 'funapp/2' @ V_f @ V_x ) )
          & ( ( '^/2' @ V_r @ 2.0 )
            = ( $sum @ ( '^/2' @ ( $difference @ V_x @ V_cx ) @ 2.0 ) @ ( '^/2' @ ( $difference @ V_y @ V_cy ) @ 2.0 ) ) ) ) ) ) )).

thf('2d.def_move_along_counter_clockwise_on_circle_axiom',axiom,(
    ! [V_len: $real,V_qy: $real,V_qx: $real,V_py: $real,V_px: $real,V_r: $real,V_cy: $real,V_cx: $real] :
      ( ( '2d.circle-type/1' @ ( '2d.circle/2' @ ( '2d.point/2' @ V_cx @ V_cy ) @ V_r ) )
     => ( ( '2d.move-along-counter-clockwise-len/4' @ ( '2d.circle/2' @ ( '2d.point/2' @ V_cx @ V_cy ) @ V_r ) @ ( '2d.point/2' @ V_px @ V_py ) @ ( '2d.point/2' @ V_qx @ V_qy ) @ V_len )
      <=> ( ( '2d.on/2' @ ( '2d.point/2' @ V_px @ V_py ) @ ( '2d.circle/2' @ ( '2d.point/2' @ V_cx @ V_cy ) @ V_r ) )
          & ( '2d.on/2' @ ( '2d.point/2' @ V_qx @ V_qy ) @ ( '2d.circle/2' @ ( '2d.point/2' @ V_cx @ V_cy ) @ V_r ) )
          & ( ( $difference @ V_qx @ V_cx )
            = ( $difference @ ( $product @ ( 'cos/1' @ ( $quotient @ V_len @ V_r ) ) @ ( $difference @ V_px @ V_cx ) ) @ ( $product @ ( 'sin/1' @ ( $quotient @ V_len @ V_r ) ) @ ( $difference @ V_py @ V_cy ) ) ) )
          & ( ( $difference @ V_qy @ V_cy )
            = ( $sum @ ( $product @ ( 'sin/1' @ ( $quotient @ V_len @ V_r ) ) @ ( $difference @ V_px @ V_cx ) ) @ ( $product @ ( 'cos/1' @ ( $quotient @ V_len @ V_r ) ) @ ( $difference @ V_py @ V_cy ) ) ) ) ) ) ) )).

thf('2d.def-center-of-regular-polygon_axiom',axiom,(
    ! [V_Ps: ( 'ListOf' @ '2d.Point' )] :
      ( ( '2d.polygon-type/1' @ ( '2d.polygon/1' @ V_Ps ) )
     => ( ( '2d.center-of/1' @ ( '2d.polygon/1' @ V_Ps ) )
        = ( '2d.vec->point/1'
          @ ( '2d.sv*/2' @ ( $quotient @ 1.0 @ ( $to_real @ ( 'list-len/1' @ '2d.Point' @ V_Ps ) ) )
            @ ( '2d.vec/2' @ '2d.origin/0'
              @ ( 'foldr1/2' @ '2d.Point'
                @ ^ [V_v1: '2d.Point',V_v2: '2d.Point'] :
                    ( '2d.vec->point/1' @ ( '2d.v+/2' @ ( '2d.vec/2' @ '2d.origin/0' @ V_v1 ) @ ( '2d.vec/2' @ '2d.origin/0' @ V_v2 ) ) )
                @ V_Ps ) ) ) ) ) ) )).

thf('2d.def_char_fun_of_line2d_axiom',axiom,(
    ! [V_lz: $real,V_ly: $real,V_lx: $real] :
      ( ( '2d.line-type/1' @ ( '2d.line2d/3' @ V_lx @ V_ly @ V_lz ) )
     => ( ( '2d.char-fun-of/1' @ ( '2d.line2d/3' @ V_lx @ V_ly @ V_lz ) )
        = ( ^ [V_P: '2d.Point'] :
              ( V_lz
              = ( $sum @ ( $product @ V_lx @ ( '2d.x-coord/1' @ V_P ) ) @ ( $product @ V_ly @ ( '2d.y-coord/1' @ V_P ) ) ) ) ) ) ) )).

thf('2d.def_outer_prod_2d_axiom',axiom,(
    ! [V_x1: $real,V_y1: $real,V_x2: $real,V_y2: $real] :
      ( ( '2d.outer-prod/2' @ ( '2d.vec2d/2' @ V_x1 @ V_y1 ) @ ( '2d.vec2d/2' @ V_x2 @ V_y2 ) )
      = ( $difference @ ( $product @ V_x1 @ V_y2 ) @ ( $product @ V_y1 @ V_x2 ) ) ) )).

thf('2d.def_in_counter_clockwise_direction_axiom',axiom,(
    ! [V_p1: '2d.Point',V_p2: '2d.Point',V_p3: '2d.Point',V_p4: '2d.Point',V_p5: '2d.Point',V_p6: '2d.Point'] :
      ( ( '2d.in-counter-clockwise-direction/1' @ ( 'cons/2' @ '2d.Point' @ V_p1 @ ( 'cons/2' @ '2d.Point' @ V_p2 @ ( 'cons/2' @ '2d.Point' @ V_p3 @ ( 'cons/2' @ '2d.Point' @ V_p4 @ ( 'cons/2' @ '2d.Point' @ V_p5 @ ( 'cons/2' @ '2d.Point' @ V_p6 @ ( 'nil/0' @ '2d.Point' ) ) ) ) ) ) ) )
    <=> ( $lesseq @ 0.0 @ ( $sum @ ( '2d.outer-prod/2' @ ( '2d.vec/2' @ '2d.origin/0' @ V_p1 ) @ ( '2d.vec/2' @ '2d.origin/0' @ V_p2 ) ) @ ( $sum @ ( '2d.outer-prod/2' @ ( '2d.vec/2' @ '2d.origin/0' @ V_p2 ) @ ( '2d.vec/2' @ '2d.origin/0' @ V_p3 ) ) @ ( $sum @ ( '2d.outer-prod/2' @ ( '2d.vec/2' @ '2d.origin/0' @ V_p3 ) @ ( '2d.vec/2' @ '2d.origin/0' @ V_p4 ) ) @ ( $sum @ ( '2d.outer-prod/2' @ ( '2d.vec/2' @ '2d.origin/0' @ V_p4 ) @ ( '2d.vec/2' @ '2d.origin/0' @ V_p5 ) ) @ ( $sum @ ( '2d.outer-prod/2' @ ( '2d.vec/2' @ '2d.origin/0' @ V_p5 ) @ ( '2d.vec/2' @ '2d.origin/0' @ V_p6 ) ) @ ( '2d.outer-prod/2' @ ( '2d.vec/2' @ '2d.origin/0' @ V_p6 ) @ ( '2d.vec/2' @ '2d.origin/0' @ V_p1 ) ) ) ) ) ) ) ) ) )).

thf('2d.def_points_bending_to_same_side_2d_axiom',axiom,(
    ! [V_p0: '2d.Point',V_p1: '2d.Point',V_ps: ( 'ListOf' @ '2d.Point' )] :
      ( ( '2d.points-bending-to-same-side/1' @ ( 'cons/2' @ '2d.Point' @ V_p0 @ ( 'cons/2' @ '2d.Point' @ V_p1 @ V_ps ) ) )
    <=> ( 'cyclic-all/2' @ '2d.Point'
        @ ^ [V_x: '2d.Point',V_y: '2d.Point',V_z: '2d.Point'] :
            ( $less @ 0.0 @ ( $product @ ( '2d.outer-prod/2' @ ( '2d.vec/2' @ V_p0 @ ( 'last/1' @ '2d.Point' @ V_ps ) ) @ ( '2d.vec/2' @ V_p0 @ V_p1 ) ) @ ( '2d.outer-prod/2' @ ( '2d.vec/2' @ V_y @ V_x ) @ ( '2d.vec/2' @ V_y @ V_z ) ) ) )
        @ ( 'cons/2' @ '2d.Point' @ V_p0 @ ( 'cons/2' @ '2d.Point' @ V_p1 @ V_ps ) ) ) ) )).

thf('2d.def_tangent_circle_and_circle_axiom',axiom,(
    ! [V_t: '2d.Point',V_r2: $real,V_c2: '2d.Point',V_r1: $real,V_c1: '2d.Point'] :
      ( ( ( '2d.circle-type/1' @ ( '2d.circle/2' @ V_c1 @ V_r1 ) )
        & ( '2d.circle-type/1' @ ( '2d.circle/2' @ V_c2 @ V_r2 ) ) )
     => ( ( '2d.tangent/3' @ ( '2d.circle/2' @ V_c1 @ V_r1 ) @ ( '2d.circle/2' @ V_c2 @ V_r2 ) @ V_t )
      <=> ( ( '2d.on/2' @ V_t @ ( '2d.circle/2' @ V_c1 @ V_r1 ) )
          & ( '2d.on/2' @ V_t @ ( '2d.circle/2' @ V_c2 @ V_r2 ) )
          & ( ( ( '2d.distance^2/2' @ V_c1 @ V_c2 )
              = ( '^/2' @ ( $difference @ V_r1 @ V_r2 ) @ 2.0 ) )
            | ( ( '2d.distance^2/2' @ V_c1 @ V_c2 )
              = ( '^/2' @ ( $sum @ V_r1 @ V_r2 ) @ 2.0 ) ) ) ) ) ) )).

thf('2d.def_intersect_obj_line2d_axiom',axiom,(
    ! [V_P: '2d.Point',V_q: '2d.Point',V_p: '2d.Point',V_obj: '2d.Shape'] :
      ( ( '2d.line-type/1' @ ( '2d.line/2' @ V_p @ V_q ) )
     => ( ( '2d.intersect/3' @ V_obj @ ( '2d.line/2' @ V_p @ V_q ) @ V_P )
      <=> ( ( '2d.on/2' @ V_P @ V_obj )
          & ( '2d.on/2' @ V_P @ ( '2d.line/2' @ V_p @ V_q ) ) ) ) ) )).

thf('2d.def_intersect_line2d_obj_axiom',axiom,(
    ! [V_P: '2d.Point',V_q: '2d.Point',V_p: '2d.Point',V_obj: '2d.Shape'] :
      ( ( '2d.line-type/1' @ ( '2d.line/2' @ V_p @ V_q ) )
     => ( ( '2d.intersect/3' @ ( '2d.line/2' @ V_p @ V_q ) @ V_obj @ V_P )
      <=> ( '2d.intersect/3' @ V_obj @ ( '2d.line/2' @ V_p @ V_q ) @ V_P ) ) ) )).

thf('2d.def_perpendicular_line_vs_graph_axiom',axiom,(
    ! [V_f: 'R2R',V_Q: '2d.Point',V_P: '2d.Point'] :
      ( ( '2d.line-type/1' @ ( '2d.line/2' @ V_P @ V_Q ) )
     => ( ( '2d.perpendicular/2' @ ( '2d.line/2' @ V_P @ V_Q ) @ ( '2d.graph-of/1' @ V_f ) )
      <=> ( ( ( 'fun/1'
              @ ^ [V_x: $real] : 0.0 )
            = ( 'derivative/1' @ ( 'derivative/1' @ V_f ) ) )
          & ( 0.0
            = ( '2d.inner-prod/2' @ ( '2d.vec/2' @ V_P @ V_Q ) @ ( '2d.vec2d/2' @ 1.0 @ ( 'funapp/2' @ ( 'derivative/1' @ V_f ) @ 0.0 ) ) ) ) ) ) ) )).

thf('2d.def_intersect/2_to_/3_2d_axiom',axiom,(
    ! [V_S: '2d.Shape',V_T: '2d.Shape'] :
      ( ( '2d.intersect/2' @ V_S @ V_T )
    <=> ? [V_P: '2d.Point'] :
          ( '2d.intersect/3' @ V_S @ V_T @ V_P ) ) )).

thf('2d.def_intersect_obj_vs_obj_2d_axiom',axiom,(
    ! [V_A: '2d.Shape',V_B: '2d.Shape',V_P: '2d.Point'] :
      ( ( '2d.intersect/3' @ V_A @ V_B @ V_P )
    <=> ( ( '2d.on/2' @ V_P @ V_A )
        & ( '2d.on/2' @ V_P @ V_B ) ) ) )).

thf('2d.def-are-intersection-points-of-parabola-and-line_axiom',axiom,(
    ! [V_Ps: ( 'ListOf' @ '2d.Point' ),V_c: $real,V_b: $real,V_a: $real,V_B: '2d.Point',V_A: '2d.Point'] :
      ( ( '2d.line-type/1' @ ( '2d.line/2' @ V_A @ V_B ) )
     => ( ( '2d.are-intersection-points-of/2' @ V_Ps @ ( 'cons/2' @ '2d.Shape' @ ( '2d.line/2' @ V_A @ V_B ) @ ( 'cons/2' @ '2d.Shape' @ ( '2d.graph-of/1' @ ( 'poly-fun/1' @ ( 'cons/2' @ $real @ V_c @ ( 'cons/2' @ $real @ V_b @ ( 'cons/2' @ $real @ V_a @ ( 'nil/0' @ $real ) ) ) ) ) ) @ ( 'nil/0' @ '2d.Shape' ) ) ) )
      <=> ( ( ( ( '2d.x-coord/1' @ V_A )
              = ( '2d.x-coord/1' @ V_B ) )
            & ( V_Ps
              = ( 'cons/2' @ '2d.Point' @ ( '2d.point/2' @ ( '2d.x-coord/1' @ V_A ) @ ( 'poly-value/2' @ ( 'cons/2' @ $real @ V_c @ ( 'cons/2' @ $real @ V_b @ ( 'cons/2' @ $real @ V_a @ ( 'nil/0' @ $real ) ) ) ) @ ( '2d.x-coord/1' @ V_A ) ) ) @ ( 'nil/0' @ '2d.Point' ) ) ) )
          | ( ( ( '2d.x-coord/1' @ V_A )
             != ( '2d.x-coord/1' @ V_B ) )
            & ? [V_xs: ( 'ListOf' @ $real )] :
                ( ( 'are-solutions-of/2' @ V_xs @ ( 'poly-equation/1' @ ( 'cons/2' @ $real @ ( $difference @ V_c @ ( $sum @ ( $uminus @ ( $product @ ( $quotient @ ( $difference @ ( '2d.y-coord/1' @ V_B ) @ ( '2d.y-coord/1' @ V_A ) ) @ ( $difference @ ( '2d.x-coord/1' @ V_B ) @ ( '2d.x-coord/1' @ V_A ) ) ) @ ( '2d.x-coord/1' @ V_A ) ) ) @ ( '2d.y-coord/1' @ V_A ) ) ) @ ( 'cons/2' @ $real @ ( $difference @ V_b @ ( $quotient @ ( $difference @ ( '2d.y-coord/1' @ V_B ) @ ( '2d.y-coord/1' @ V_A ) ) @ ( $difference @ ( '2d.x-coord/1' @ V_B ) @ ( '2d.x-coord/1' @ V_A ) ) ) ) @ ( 'cons/2' @ $real @ V_a @ ( 'nil/0' @ $real ) ) ) ) ) )
                & ( V_Ps
                  = ( 'map/2' @ $real @ '2d.Point'
                    @ ^ [V_x: $real] :
                        ( '2d.point/2' @ V_x @ ( 'poly-value/2' @ ( 'cons/2' @ $real @ V_c @ ( 'cons/2' @ $real @ V_b @ ( 'cons/2' @ $real @ V_a @ ( 'nil/0' @ $real ) ) ) ) @ V_x ) )
                    @ V_xs ) ) ) ) ) ) ) )).

thf('2d.def-are-intersection-points-of-line-and-parabola_axiom',axiom,(
    ! [V_Ps: ( 'ListOf' @ '2d.Point' ),V_c: $real,V_b: $real,V_a: $real,V_B: '2d.Point',V_A: '2d.Point'] :
      ( ( '2d.line-type/1' @ ( '2d.line/2' @ V_A @ V_B ) )
     => ( ( '2d.are-intersection-points-of/2' @ V_Ps @ ( 'cons/2' @ '2d.Shape' @ ( '2d.graph-of/1' @ ( 'poly-fun/1' @ ( 'cons/2' @ $real @ V_c @ ( 'cons/2' @ $real @ V_b @ ( 'cons/2' @ $real @ V_a @ ( 'nil/0' @ $real ) ) ) ) ) ) @ ( 'cons/2' @ '2d.Shape' @ ( '2d.line/2' @ V_A @ V_B ) @ ( 'nil/0' @ '2d.Shape' ) ) ) )
      <=> ( '2d.are-intersection-points-of/2' @ V_Ps @ ( 'cons/2' @ '2d.Shape' @ ( '2d.line/2' @ V_A @ V_B ) @ ( 'cons/2' @ '2d.Shape' @ ( '2d.graph-of/1' @ ( 'poly-fun/1' @ ( 'cons/2' @ $real @ V_c @ ( 'cons/2' @ $real @ V_b @ ( 'cons/2' @ $real @ V_a @ ( 'nil/0' @ $real ) ) ) ) ) ) @ ( 'nil/0' @ '2d.Shape' ) ) ) ) ) ) )).

thf('2d.def-are-intersection-points-of-general-case_axiom',axiom,(
    ! [V_Ps: ( 'ListOf' @ '2d.Point' ),V_A: '2d.Shape',V_B: '2d.Shape'] :
      ( ( '2d.are-intersection-points-of/2' @ V_Ps @ ( 'cons/2' @ '2d.Shape' @ V_A @ ( 'cons/2' @ '2d.Shape' @ V_B @ ( 'nil/0' @ '2d.Shape' ) ) ) )
    <=> ! [V_P: '2d.Point'] :
          ( ( 'member/2' @ '2d.Point' @ V_P @ V_Ps )
        <=> ( ( '2d.on/2' @ V_P @ V_A )
            & ( '2d.on/2' @ V_P @ V_B ) ) ) ) )).

thf('2d.def_angle_in_counterclockwise_axiom',axiom,(
    ! [V_v0: '2d.Vector',V_v1: '2d.Vector'] :
      ( ( '2d.angle-in-counterclockwise/2' @ V_v0 @ V_v1 )
      = ( 'if/3' @ $real
        @ ^ [V__: 'Unit'] :
            ( $lesseq @ 0.0 @ ( '2d.outer-prod/2' @ V_v0 @ V_v1 ) )
        @ ( '2d.rad-of-angle/1' @ ( '2d.angle-of-vectors/2' @ V_v1 @ V_v0 ) )
        @ ( $difference @ ( $product @ 2.0 @ 'Pi/0' ) @ ( '2d.rad-of-angle/1' @ ( '2d.angle-of-vectors/2' @ V_v1 @ V_v0 ) ) ) ) ) )).

thf('2d.def_formed_angle__of_2d_axiom',axiom,(
    ! [V_d: '2d.Point',V_c: '2d.Point',V_b: '2d.Point',V_a: '2d.Point'] :
      ( ( ( '2d.line-type/1' @ ( '2d.line/2' @ V_a @ V_b ) )
        & ( '2d.line-type/1' @ ( '2d.line/2' @ V_c @ V_d ) ) )
     => ( ( '2d.formed-angle-of/2' @ ( '2d.line/2' @ V_a @ V_b ) @ ( '2d.line/2' @ V_c @ V_d ) )
        = ( '2d.angle-of-vectors/2' @ ( '2d.vec/2' @ V_a @ V_b ) @ ( '2d.vec/2' @ V_c @ V_d ) ) ) ) )).

thf('2d.def_center_of_circle_2d_axiom',axiom,(
    ! [V_r: $real,V_c: '2d.Point'] :
      ( ( '2d.circle-type/1' @ ( '2d.circle/2' @ V_c @ V_r ) )
     => ( ( '2d.center-of/1' @ ( '2d.circle/2' @ V_c @ V_r ) )
        = V_c ) ) )).

thf('2d.def_radius_of_circle_2d_axiom',axiom,(
    ! [V_r: $real,V_c: '2d.Point'] :
      ( ( '2d.circle-type/1' @ ( '2d.circle/2' @ V_c @ V_r ) )
     => ( ( '2d.radius-of/1' @ ( '2d.circle/2' @ V_c @ V_r ) )
        = V_r ) ) )).

thf('2d.def_center_of_disk_2d_axiom',axiom,(
    ! [V_r: $real,V_c: '2d.Point'] :
      ( ( '2d.disk-type/1' @ ( '2d.disk/2' @ V_c @ V_r ) )
     => ( ( '2d.center-of/1' @ ( '2d.disk/2' @ V_c @ V_r ) )
        = V_c ) ) )).

thf('2d.def_radius_of_disk_2d_axiom',axiom,(
    ! [V_r: $real,V_c: '2d.Point'] :
      ( ( '2d.disk-type/1' @ ( '2d.disk/2' @ V_c @ V_r ) )
     => ( ( '2d.radius-of/1' @ ( '2d.disk/2' @ V_c @ V_r ) )
        = V_r ) ) )).

thf('2d.def_center_of_arc_2d_axiom',axiom,(
    ! [V_c: '2d.Point',V_r: $real,V_ini: $real,V_end: $real] :
      ( ( '2d.center-of/1' @ ( '2d.arc/4' @ V_c @ V_r @ V_ini @ V_end ) )
      = V_c ) )).

thf('2d.def_radius_of_arc_2d_axiom',axiom,(
    ! [V_c: '2d.Point',V_r: $real,V_ini: $real,V_end: $real] :
      ( ( '2d.radius-of/1' @ ( '2d.arc/4' @ V_c @ V_r @ V_ini @ V_end ) )
      = ( '2d.radius-of/1' @ ( '2d.arc-shape/1' @ ( '2d.arc/4' @ V_c @ V_r @ V_ini @ V_end ) ) ) ) )).

thf('2d.def_center_of_circular_sector_2d_axiom',axiom,(
    ! [V_end: $real,V_ini: $real,V_r: $real,V_c: '2d.Point'] :
      ( ( '2d.circular-sector-type/1' @ ( '2d.circular-sector/4' @ V_c @ V_r @ V_ini @ V_end ) )
     => ( ( '2d.center-of/1' @ ( '2d.circular-sector/4' @ V_c @ V_r @ V_ini @ V_end ) )
        = V_c ) ) )).

thf('2d.def_radius_of_circular_sector_2d_axiom',axiom,(
    ! [V_end: $real,V_ini: $real,V_r: $real,V_c: '2d.Point'] :
      ( ( '2d.circular-sector-type/1' @ ( '2d.circular-sector/4' @ V_c @ V_r @ V_ini @ V_end ) )
     => ( ( '2d.radius-of/1' @ ( '2d.circular-sector/4' @ V_c @ V_r @ V_ini @ V_end ) )
        = V_r ) ) )).

thf('2d.def_area_of_triangle2d_axiom',axiom,(
    ! [V_r: '2d.Point',V_q: '2d.Point',V_p: '2d.Point'] :
      ( ( '2d.triangle-type/1' @ ( '2d.triangle/3' @ V_p @ V_q @ V_r ) )
     => ( ( '2d.area-of/1' @ ( '2d.triangle/3' @ V_p @ V_q @ V_r ) )
        = ( $product @ ( $quotient @ 1.0 @ 2.0 ) @ ( 'abs/1' @ ( '2d.outer-prod/2' @ ( '2d.vec/2' @ V_p @ V_q ) @ ( '2d.vec/2' @ V_p @ V_r ) ) ) ) ) ) )).

thf('2d.def_area_of_circle_2d_axiom',axiom,(
    ! [V_r: $real,V_c: '2d.Point'] :
      ( ( '2d.circle-type/1' @ ( '2d.circle/2' @ V_c @ V_r ) )
     => ( ( '2d.area-of/1' @ ( '2d.circle/2' @ V_c @ V_r ) )
        = ( $product @ 'Pi/0' @ ( '^/2' @ V_r @ 2.0 ) ) ) ) )).

thf('2d.def_area_of_disk_2d_axiom',axiom,(
    ! [V_r: $real,V_c: '2d.Point'] :
      ( ( '2d.disk-type/1' @ ( '2d.disk/2' @ V_c @ V_r ) )
     => ( ( '2d.area-of/1' @ ( '2d.disk/2' @ V_c @ V_r ) )
        = ( $product @ 'Pi/0' @ ( '^/2' @ V_r @ 2.0 ) ) ) ) )).

thf('2d.def_area_of_arc_2d_axiom',axiom,(
    ! [V_c: '2d.Point',V_r: $real,V_ini: $real,V_end: $real] :
      ( ( '2d.area-of/1' @ ( '2d.arc/4' @ V_c @ V_r @ V_ini @ V_end ) )
      = ( '2d.area-of/1' @ ( '2d.arc-shape/1' @ ( '2d.arc/4' @ V_c @ V_r @ V_ini @ V_end ) ) ) ) )).

thf('2d.def_area_of_circular_sector_2d_axiom',axiom,(
    ! [V_end: $real,V_ini: $real,V_r: $real,V_c: '2d.Point'] :
      ( ( '2d.circular-sector-type/1' @ ( '2d.circular-sector/4' @ V_c @ V_r @ V_ini @ V_end ) )
     => ( ( '2d.area-of/1' @ ( '2d.circular-sector/4' @ V_c @ V_r @ V_ini @ V_end ) )
        = ( '2d.area-of/1' @ ( '2d.arc/4' @ V_c @ V_r @ V_ini @ V_end ) ) ) ) )).

thf('2d.def-perimeter-of-circle_axiom',axiom,(
    ! [V_r: $real,V_c: '2d.Point'] :
      ( ( '2d.circle-type/1' @ ( '2d.circle/2' @ V_c @ V_r ) )
     => ( ( '2d.length-of/1' @ ( '2d.circle/2' @ V_c @ V_r ) )
        = ( $product @ 2.0 @ ( $product @ 'Pi/0' @ V_r ) ) ) ) )).

thf('2d.def-length-of-arc_axiom',axiom,(
    ! [V_c: '2d.Point',V_r: $real,V_ini: $real,V_end: $real] :
      ( ( '2d.length-of/1' @ ( '2d.arc/4' @ V_c @ V_r @ V_ini @ V_end ) )
      = ( '2d.length-of/1' @ ( '2d.arc-shape/1' @ ( '2d.arc/4' @ V_c @ V_r @ V_ini @ V_end ) ) ) ) )).

thf('2d.def-length-of-union-of-shapes_axiom',axiom,(
    ! [V_ss: ( 'ListOf' @ '2d.Shape' )] :
      ( ( '2d.length-of/1' @ ( '2d.union/1' @ V_ss ) )
      = ( 'sum/1'
        @ ( 'map/2' @ '2d.Shape' @ $real
          @ ^ [V_x: '2d.Shape'] :
              ( '2d.length-of/1' @ V_x )
          @ V_ss ) ) ) )).

thf('2d.def-shape-convex-upward_axiom',axiom,(
    ! [V_f: 'R2R'] :
      ( ( '2d.convex-upward/1' @ ( '2d.graph-of/1' @ V_f ) )
    <=> ( 'fun-convex-upward/1' @ V_f ) ) )).

thf('2d.def-shape-convex-upward-in-region_axiom',axiom,(
    ! [V_f: 'R2R',V_region: ( 'SetOf' @ $real )] :
      ( ( '2d.convex-upward/2' @ ( '2d.graph-of/1' @ V_f ) @ V_region )
    <=> ( 'fun-convex-upward/2' @ V_f @ V_region ) ) )).

thf('2d.def-shape-convex-downward_axiom',axiom,(
    ! [V_f: 'R2R'] :
      ( ( '2d.convex-downward/1' @ ( '2d.graph-of/1' @ V_f ) )
    <=> ( 'fun-convex-downward/1' @ V_f ) ) )).

thf('2d.def-shape-convex-downward-in-region_axiom',axiom,(
    ! [V_f: 'R2R',V_region: ( 'SetOf' @ $real )] :
      ( ( '2d.convex-downward/2' @ ( '2d.graph-of/1' @ V_f ) @ V_region )
    <=> ( 'fun-convex-downward/2' @ V_f @ V_region ) ) )).

thf('2d.def_point_on_poly_fun_axiom',axiom,(
    ! [V_P: '2d.Point',V_cs: ( 'ListOf' @ $real )] :
      ( ( '2d.on/2' @ V_P @ ( '2d.graph-of/1' @ ( 'poly-fun/1' @ V_cs ) ) )
    <=> ( ( '2d.y-coord/1' @ V_P )
        = ( 'poly-value/2' @ V_cs @ ( '2d.x-coord/1' @ V_P ) ) ) ) )).

thf('2d.def_point_on_graph_axiom',axiom,(
    ! [V_f: 'R2R',V_px: $real,V_py: $real] :
      ( ( '2d.on/2' @ ( '2d.point/2' @ V_px @ V_py ) @ ( '2d.graph-of/1' @ V_f ) )
    <=> ( V_py
        = ( 'funapp/2' @ V_f @ V_px ) ) ) )).

thf('2d.def_point_on_graph_of_implicit_function_axiom',axiom,(
    ! [V_x: $real,V_y: $real,V_f: ( $real > $real > $real )] :
      ( ( '2d.on/2' @ ( '2d.point/2' @ V_x @ V_y ) @ ( '2d.graph-of-implicit-function/1' @ V_f ) )
    <=> ( 0.0
        = ( V_f @ V_x @ V_y ) ) ) )).

thf('2d.def_on_set_of_cfun_axiom',axiom,(
    ! [V_x: $real,V_y: $real,V_cf: ( $real > $real > $o )] :
      ( ( '2d.on/2' @ ( '2d.point/2' @ V_x @ V_y ) @ ( '2d.set-of-cfun/1' @ V_cf ) )
    <=> ( V_cf @ V_x @ V_y ) ) )).

thf('2d.def_on_circle_2d_axiom',axiom,(
    ! [V_r: $real,V_c: '2d.Point',V_p: '2d.Point'] :
      ( ( '2d.circle-type/1' @ ( '2d.circle/2' @ V_c @ V_r ) )
     => ( ( '2d.on/2' @ V_p @ ( '2d.circle/2' @ V_c @ V_r ) )
      <=> ( '2d.on/2' @ V_p @ ( '2d.circle-shape/1' @ ( '2d.circle/2' @ V_c @ V_r ) ) ) ) ) )).

thf('2d.def_on_disk_2d_axiom',axiom,(
    ! [V_r: $real,V_c: '2d.Point',V_p: '2d.Point'] :
      ( ( '2d.disk-type/1' @ ( '2d.disk/2' @ V_c @ V_r ) )
     => ( ( '2d.on/2' @ V_p @ ( '2d.disk/2' @ V_c @ V_r ) )
      <=> ( '2d.on/2' @ V_p @ ( '2d.disk-shape/1' @ ( '2d.disk/2' @ V_c @ V_r ) ) ) ) ) )).

thf('2d.def_on_arc_2d_axiom',axiom,(
    ! [V_p: '2d.Point',V_c: '2d.Point',V_r: $real,V_b: $real,V_e: $real] :
      ( ( '2d.on/2' @ V_p @ ( '2d.arc/4' @ V_c @ V_r @ V_b @ V_e ) )
    <=> ( '2d.on/2' @ V_p @ ( '2d.arc-shape/1' @ ( '2d.arc/4' @ V_c @ V_r @ V_b @ V_e ) ) ) ) )).

thf('2d.def_on_circular_sector_2d_axiom',axiom,(
    ! [V_e: $real,V_b: $real,V_r: $real,V_c: '2d.Point',V_p: '2d.Point'] :
      ( ( '2d.circular-sector-type/1' @ ( '2d.circular-sector/4' @ V_c @ V_r @ V_b @ V_e ) )
     => ( ( '2d.on/2' @ V_p @ ( '2d.circular-sector/4' @ V_c @ V_r @ V_b @ V_e ) )
      <=> ( '2d.on/2' @ V_p @ ( '2d.circular-sector-shape/1' @ ( '2d.circular-sector/4' @ V_c @ V_r @ V_b @ V_e ) ) ) ) ) )).

thf('2d.def_char_fun_of_inside_of_circle_2d_axiom',axiom,(
    ! [V_r: $real,V_c: '2d.Point'] :
      ( ( '2d.circle-type/1' @ ( '2d.circle/2' @ V_c @ V_r ) )
     => ( ( '2d.char-fun-of/1' @ ( '2d.inner-part-of/1' @ ( '2d.circle/2' @ V_c @ V_r ) ) )
        = ( '2d.char-fun-of/1' @ ( '2d.inner-part-of/1' @ ( '2d.circle-shape/1' @ ( '2d.circle/2' @ V_c @ V_r ) ) ) ) ) ) )).

thf('2d.def_char_fun_of_inside_of_disk_2d_axiom',axiom,(
    ! [V_r: $real,V_c: '2d.Point'] :
      ( ( '2d.disk-type/1' @ ( '2d.disk/2' @ V_c @ V_r ) )
     => ( ( '2d.char-fun-of/1' @ ( '2d.inner-part-of/1' @ ( '2d.disk/2' @ V_c @ V_r ) ) )
        = ( '2d.char-fun-of/1' @ ( '2d.inner-part-of/1' @ ( '2d.disk-shape/1' @ ( '2d.disk/2' @ V_c @ V_r ) ) ) ) ) ) )).

thf('2d.def_char_fun_of_inside_of_arc_2d_axiom',axiom,(
    ! [V_c: '2d.Point',V_r: $real,V_b: $real,V_e: $real] :
      ( ( '2d.char-fun-of/1' @ ( '2d.inner-part-of/1' @ ( '2d.arc/4' @ V_c @ V_r @ V_b @ V_e ) ) )
      = ( '2d.char-fun-of/1' @ ( '2d.inner-part-of/1' @ ( '2d.arc-shape/1' @ ( '2d.arc/4' @ V_c @ V_r @ V_b @ V_e ) ) ) ) ) )).

thf('2d.def_char_fun_of_inside_of_circular_sector_2d_axiom',axiom,(
    ! [V_e: $real,V_b: $real,V_r: $real,V_c: '2d.Point'] :
      ( ( '2d.circular-sector-type/1' @ ( '2d.circular-sector/4' @ V_c @ V_r @ V_b @ V_e ) )
     => ( ( '2d.char-fun-of/1' @ ( '2d.inner-part-of/1' @ ( '2d.circular-sector/4' @ V_c @ V_r @ V_b @ V_e ) ) )
        = ( '2d.char-fun-of/1' @ ( '2d.inner-part-of/1' @ ( '2d.circular-sector-shape/1' @ ( '2d.circular-sector/4' @ V_c @ V_r @ V_b @ V_e ) ) ) ) ) ) )).

thf('2d.def_char_fun_of_circle_with_boundary_2d_axiom',axiom,(
    ! [V_r: $real,V_c: '2d.Point'] :
      ( ( '2d.circle-type/1' @ ( '2d.circle/2' @ V_c @ V_r ) )
     => ( ( '2d.char-fun-of/1' @ ( '2d.with-boundary/1' @ ( '2d.circle/2' @ V_c @ V_r ) ) )
        = ( '2d.char-fun-of/1' @ ( '2d.with-boundary/1' @ ( '2d.circle-shape/1' @ ( '2d.circle/2' @ V_c @ V_r ) ) ) ) ) ) )).

thf('2d.def_char_fun_of_disk_with_boundary_2d_axiom',axiom,(
    ! [V_r: $real,V_c: '2d.Point'] :
      ( ( '2d.disk-type/1' @ ( '2d.disk/2' @ V_c @ V_r ) )
     => ( ( '2d.char-fun-of/1' @ ( '2d.with-boundary/1' @ ( '2d.disk/2' @ V_c @ V_r ) ) )
        = ( '2d.char-fun-of/1' @ ( '2d.with-boundary/1' @ ( '2d.disk-shape/1' @ ( '2d.disk/2' @ V_c @ V_r ) ) ) ) ) ) )).

thf('2d.def_char_fun_of_arc_with_boundary_2d_axiom',axiom,(
    ! [V_c: '2d.Point',V_r: $real,V_b: $real,V_e: $real] :
      ( ( '2d.char-fun-of/1' @ ( '2d.with-boundary/1' @ ( '2d.arc/4' @ V_c @ V_r @ V_b @ V_e ) ) )
      = ( '2d.char-fun-of/1' @ ( '2d.with-boundary/1' @ ( '2d.arc-shape/1' @ ( '2d.arc/4' @ V_c @ V_r @ V_b @ V_e ) ) ) ) ) )).

thf('2d.def_char_fun_of_circular_sector_with_boundary_2d_axiom',axiom,(
    ! [V_e: $real,V_b: $real,V_r: $real,V_c: '2d.Point'] :
      ( ( '2d.circular-sector-type/1' @ ( '2d.circular-sector/4' @ V_c @ V_r @ V_b @ V_e ) )
     => ( ( '2d.char-fun-of/1' @ ( '2d.with-boundary/1' @ ( '2d.circular-sector/4' @ V_c @ V_r @ V_b @ V_e ) ) )
        = ( '2d.char-fun-of/1' @ ( '2d.with-boundary/1' @ ( '2d.circular-sector-shape/1' @ ( '2d.circular-sector/4' @ V_c @ V_r @ V_b @ V_e ) ) ) ) ) ) )).

thf('2d.def_char_fun_of_boundary_of_circle_2d_axiom',axiom,(
    ! [V_r: $real,V_c: '2d.Point'] :
      ( ( '2d.circle-type/1' @ ( '2d.circle/2' @ V_c @ V_r ) )
     => ( ( '2d.char-fun-of/1' @ ( '2d.boundary-of/1' @ ( '2d.circle/2' @ V_c @ V_r ) ) )
        = ( '2d.char-fun-of/1' @ ( '2d.boundary-of/1' @ ( '2d.circle-shape/1' @ ( '2d.circle/2' @ V_c @ V_r ) ) ) ) ) ) )).

thf('2d.def_char_fun_of_boundary_of_disk_2d_axiom',axiom,(
    ! [V_r: $real,V_c: '2d.Point'] :
      ( ( '2d.disk-type/1' @ ( '2d.disk/2' @ V_c @ V_r ) )
     => ( ( '2d.char-fun-of/1' @ ( '2d.boundary-of/1' @ ( '2d.disk/2' @ V_c @ V_r ) ) )
        = ( '2d.char-fun-of/1' @ ( '2d.boundary-of/1' @ ( '2d.disk-shape/1' @ ( '2d.disk/2' @ V_c @ V_r ) ) ) ) ) ) )).

thf('2d.def_char_fun_of_boundary_of_arc_2d_axiom',axiom,(
    ! [V_c: '2d.Point',V_r: $real,V_b: $real,V_e: $real] :
      ( ( '2d.char-fun-of/1' @ ( '2d.boundary-of/1' @ ( '2d.arc/4' @ V_c @ V_r @ V_b @ V_e ) ) )
      = ( '2d.char-fun-of/1' @ ( '2d.boundary-of/1' @ ( '2d.arc-shape/1' @ ( '2d.arc/4' @ V_c @ V_r @ V_b @ V_e ) ) ) ) ) )).

thf('2d.def_char_fun_of_boundary_of_circular_sector_2d_axiom',axiom,(
    ! [V_e: $real,V_b: $real,V_r: $real,V_c: '2d.Point'] :
      ( ( '2d.circular-sector-type/1' @ ( '2d.circular-sector/4' @ V_c @ V_r @ V_b @ V_e ) )
     => ( ( '2d.char-fun-of/1' @ ( '2d.boundary-of/1' @ ( '2d.circular-sector/4' @ V_c @ V_r @ V_b @ V_e ) ) )
        = ( '2d.char-fun-of/1' @ ( '2d.boundary-of/1' @ ( '2d.circular-sector-shape/1' @ ( '2d.circular-sector/4' @ V_c @ V_r @ V_b @ V_e ) ) ) ) ) ) )).

thf('2d.def_char_fun_of_circle_2d_axiom',axiom,(
    ! [V_r: $real,V_c: '2d.Point'] :
      ( ( '2d.circle-type/1' @ ( '2d.circle/2' @ V_c @ V_r ) )
     => ( ( '2d.char-fun-of/1' @ ( '2d.circle/2' @ V_c @ V_r ) )
        = ( '2d.char-fun-of/1' @ ( '2d.circle-shape/1' @ ( '2d.circle/2' @ V_c @ V_r ) ) ) ) ) )).

thf('2d.def_char_fun_of_disk_2d_axiom',axiom,(
    ! [V_r: $real,V_c: '2d.Point'] :
      ( ( '2d.disk-type/1' @ ( '2d.disk/2' @ V_c @ V_r ) )
     => ( ( '2d.char-fun-of/1' @ ( '2d.disk/2' @ V_c @ V_r ) )
        = ( '2d.char-fun-of/1' @ ( '2d.disk-shape/1' @ ( '2d.disk/2' @ V_c @ V_r ) ) ) ) ) )).

thf('2d.def_char_fun_of_arc_2d_axiom',axiom,(
    ! [V_c: '2d.Point',V_r: $real,V_b: $real,V_e: $real] :
      ( ( '2d.char-fun-of/1' @ ( '2d.arc/4' @ V_c @ V_r @ V_b @ V_e ) )
      = ( '2d.char-fun-of/1' @ ( '2d.arc-shape/1' @ ( '2d.arc/4' @ V_c @ V_r @ V_b @ V_e ) ) ) ) )).

thf('2d.def_char_fun_of_circular_sector_2d_axiom',axiom,(
    ! [V_e: $real,V_b: $real,V_r: $real,V_c: '2d.Point'] :
      ( ( '2d.circular-sector-type/1' @ ( '2d.circular-sector/4' @ V_c @ V_r @ V_b @ V_e ) )
     => ( ( '2d.char-fun-of/1' @ ( '2d.circular-sector/4' @ V_c @ V_r @ V_b @ V_e ) )
        = ( '2d.char-fun-of/1' @ ( '2d.circular-sector-shape/1' @ ( '2d.circular-sector/4' @ V_c @ V_r @ V_b @ V_e ) ) ) ) ) )).

thf('2d.def_circle_equality_axiom',axiom,(
    ! [V_r2: $real,V_c2: '2d.Point',V_r1: $real,V_c1: '2d.Point'] :
      ( ( ( '2d.circle-type/1' @ ( '2d.circle/2' @ V_c1 @ V_r1 ) )
        & ( '2d.circle-type/1' @ ( '2d.circle/2' @ V_c2 @ V_r2 ) ) )
     => ( ( ( '2d.circle/2' @ V_c1 @ V_r1 )
          = ( '2d.circle/2' @ V_c2 @ V_r2 ) )
      <=> ( ( V_c1 = V_c2 )
          & ( V_r1 = V_r2 ) ) ) ) )).

thf('2d.def_disk_equality_axiom',axiom,(
    ! [V_r2: $real,V_c2: '2d.Point',V_r1: $real,V_c1: '2d.Point'] :
      ( ( ( '2d.disk-type/1' @ ( '2d.disk/2' @ V_c1 @ V_r1 ) )
        & ( '2d.disk-type/1' @ ( '2d.disk/2' @ V_c2 @ V_r2 ) ) )
     => ( ( ( '2d.disk/2' @ V_c1 @ V_r1 )
          = ( '2d.disk/2' @ V_c2 @ V_r2 ) )
      <=> ( ( V_c1 = V_c2 )
          & ( V_r1 = V_r2 ) ) ) ) )).

thf('2d.def_fun_graph_equality_axiom',axiom,(
    ! [V_f1: 'R2R',V_f2: 'R2R'] :
      ( ( ( '2d.graph-of/1' @ V_f1 )
        = ( '2d.graph-of/1' @ V_f2 ) )
    <=> ( V_f1 = V_f2 ) ) )).

thf('2d.def-poly-fun-graph-line-equality_axiom',axiom,(
    ! [V_Q: '2d.Point',V_P: '2d.Point',V_cs: ( 'ListOf' @ $real )] :
      ( ( '2d.line-type/1' @ ( '2d.line/2' @ V_P @ V_Q ) )
     => ( ( ( '2d.graph-of/1' @ ( 'poly-fun/1' @ V_cs ) )
          = ( '2d.line/2' @ V_P @ V_Q ) )
      <=> ( ( V_P != V_Q )
          & ( '2d.on/2' @ V_P @ ( '2d.graph-of/1' @ ( 'poly-fun/1' @ V_cs ) ) )
          & ( '2d.on/2' @ V_Q @ ( '2d.graph-of/1' @ ( 'poly-fun/1' @ V_cs ) ) )
          & ( $lesseq @ ( 'poly-deg/1' @ V_cs ) @ 1 ) ) ) ) )).

thf('2d.def-poly-fun-graph-line-equality2_axiom',axiom,(
    ! [V_Q: '2d.Point',V_P: '2d.Point',V_b: $real] :
      ( ( '2d.line-type/1' @ ( '2d.line/2' @ V_P @ V_Q ) )
     => ( ( ( '2d.graph-of/1' @ ( 'poly-fun/1' @ ( 'cons/2' @ $real @ V_b @ ( 'nil/0' @ $real ) ) ) )
          = ( '2d.line/2' @ V_P @ V_Q ) )
      <=> ( ( V_P != V_Q )
          & ( ( '2d.y-coord/1' @ V_P )
            = V_b )
          & ( ( '2d.y-coord/1' @ V_Q )
            = V_b ) ) ) ) )).

thf('2d.def_fun_graph_line_equality_axiom',axiom,(
    ! [V_Q: '2d.Point',V_P: '2d.Point',V_f: ( $real > $real )] :
      ( ( '2d.line-type/1' @ ( '2d.line/2' @ V_P @ V_Q ) )
     => ( ( ( '2d.graph-of/1' @ ( 'fun/1' @ V_f ) )
          = ( '2d.line/2' @ V_P @ V_Q ) )
      <=> ( ( ( 'fun/1'
              @ ^ [V_x: $real] : 0.0 )
            = ( 'derivative/1' @ ( 'derivative/1' @ ( 'fun/1' @ V_f ) ) ) )
          & ( '2d.on/2' @ V_P @ ( '2d.graph-of/1' @ ( 'fun/1' @ V_f ) ) )
          & ( '2d.on/2' @ V_Q @ ( '2d.graph-of/1' @ ( 'fun/1' @ V_f ) ) )
          & ( V_P != V_Q ) ) ) ) )).

thf('2d.def_arc_equality_axiom',axiom,(
    ! [V_O0: '2d.Point',V_r0: $real,V_b0: $real,V_e0: $real,V_O1: '2d.Point',V_r1: $real,V_b1: $real,V_e1: $real] :
      ( ( ( '2d.arc/4' @ V_O0 @ V_r0 @ V_b0 @ V_e0 )
        = ( '2d.arc/4' @ V_O1 @ V_r1 @ V_b1 @ V_e1 ) )
    <=> ( ( V_O0 = V_O1 )
        & ( V_r0 = V_r1 )
        & ( V_b0 = V_b1 )
        & ( V_e0 = V_e1 ) ) ) )).

thf('2d._expand_shape_eq/2_type',type,(
    '2d._expand_shape_eq/2': '2d.Shape' > '2d.Shape' > $o )).

thf('2d.def_expand_shape_eq_axiom',axiom,(
    ! [V_S1: '2d.Shape',V_S2: '2d.Shape'] :
      ( ( '2d._expand_shape_eq/2' @ V_S1 @ V_S2 )
    <=> ! [V_p: '2d.Point'] :
          ( ( '2d.on/2' @ V_p @ V_S1 )
        <=> ( '2d.on/2' @ V_p @ V_S2 ) ) ) )).

thf('2d.def_cfun_shape_half_line_equality_axiom',axiom,(
    ! [V_p2: '2d.Point',V_p1: '2d.Point',V_f: ( $real > $real > $o )] :
      ( ( '2d.half-line-type/1' @ ( '2d.half-line/2' @ V_p1 @ V_p2 ) )
     => ( ( ( '2d.set-of-cfun/1' @ V_f )
          = ( '2d.half-line/2' @ V_p1 @ V_p2 ) )
      <=> ( '2d._expand_shape_eq/2' @ ( '2d.set-of-cfun/1' @ V_f ) @ ( '2d.half-line/2' @ V_p1 @ V_p2 ) ) ) ) )).

thf('2d.def_cfun_shape_line_equality_axiom',axiom,(
    ! [V_p2: '2d.Point',V_p1: '2d.Point',V_f: ( $real > $real > $o )] :
      ( ( '2d.line-type/1' @ ( '2d.line/2' @ V_p1 @ V_p2 ) )
     => ( ( ( '2d.set-of-cfun/1' @ V_f )
          = ( '2d.line/2' @ V_p1 @ V_p2 ) )
      <=> ( '2d._expand_shape_eq/2' @ ( '2d.set-of-cfun/1' @ V_f ) @ ( '2d.line/2' @ V_p1 @ V_p2 ) ) ) ) )).

thf('2d.def_cfun_shape_seg_equality_axiom',axiom,(
    ! [V_p2: '2d.Point',V_p1: '2d.Point',V_f: ( $real > $real > $o )] :
      ( ( '2d.segment-type/1' @ ( '2d.seg/2' @ V_p1 @ V_p2 ) )
     => ( ( ( '2d.set-of-cfun/1' @ V_f )
          = ( '2d.seg/2' @ V_p1 @ V_p2 ) )
      <=> ( '2d._expand_shape_eq/2' @ ( '2d.set-of-cfun/1' @ V_f ) @ ( '2d.seg/2' @ V_p1 @ V_p2 ) ) ) ) )).

thf('2d.def_cfun_shape_triangle_equality_axiom',axiom,(
    ! [V_p3: '2d.Point',V_p2: '2d.Point',V_p1: '2d.Point',V_f: ( $real > $real > $o )] :
      ( ( '2d.triangle-type/1' @ ( '2d.triangle/3' @ V_p1 @ V_p2 @ V_p3 ) )
     => ( ( ( '2d.set-of-cfun/1' @ V_f )
          = ( '2d.triangle/3' @ V_p1 @ V_p2 @ V_p3 ) )
      <=> ( '2d._expand_shape_eq/2' @ ( '2d.set-of-cfun/1' @ V_f ) @ ( '2d.triangle/3' @ V_p1 @ V_p2 @ V_p3 ) ) ) ) )).

thf('2d.def_cfun_shape_square_equality_axiom',axiom,(
    ! [V_p4: '2d.Point',V_p3: '2d.Point',V_p2: '2d.Point',V_p1: '2d.Point',V_f: ( $real > $real > $o )] :
      ( ( '2d.square-type/1' @ ( '2d.square/4' @ V_p1 @ V_p2 @ V_p3 @ V_p4 ) )
     => ( ( ( '2d.set-of-cfun/1' @ V_f )
          = ( '2d.square/4' @ V_p1 @ V_p2 @ V_p3 @ V_p4 ) )
      <=> ( '2d._expand_shape_eq/2' @ ( '2d.set-of-cfun/1' @ V_f ) @ ( '2d.square/4' @ V_p1 @ V_p2 @ V_p3 @ V_p4 ) ) ) ) )).

thf('2d.def_cfun_shape_polygon_equality_axiom',axiom,(
    ! [V_ps: ( 'ListOf' @ '2d.Point' ),V_f: ( $real > $real > $o )] :
      ( ( '2d.polygon-type/1' @ ( '2d.polygon/1' @ V_ps ) )
     => ( ( ( '2d.set-of-cfun/1' @ V_f )
          = ( '2d.polygon/1' @ V_ps ) )
      <=> ( '2d._expand_shape_eq/2' @ ( '2d.set-of-cfun/1' @ V_f ) @ ( '2d.polygon/1' @ V_ps ) ) ) ) )).

thf('2d.def_cfun_shape_cfun_shape_equality_axiom',axiom,(
    ! [V_f: ( $real > $real > $o ),V_g: ( $real > $real > $o )] :
      ( ( ( '2d.set-of-cfun/1' @ V_f )
        = ( '2d.set-of-cfun/1' @ V_g ) )
    <=> ( '2d._expand_shape_eq/2' @ ( '2d.set-of-cfun/1' @ V_f ) @ ( '2d.set-of-cfun/1' @ V_g ) ) ) )).

thf('2d.def_cfun_shape_intersection_equality_axiom',axiom,(
    ! [V_f: ( $real > $real > $o ),V_S1: '2d.Shape',V_S2: '2d.Shape'] :
      ( ( ( '2d.set-of-cfun/1' @ V_f )
        = ( '2d.intersection/2' @ V_S1 @ V_S2 ) )
    <=> ( '2d._expand_shape_eq/2' @ ( '2d.set-of-cfun/1' @ V_f ) @ ( '2d.intersection/2' @ V_S1 @ V_S2 ) ) ) )).

thf('2d.def_cfun_shape_intersection_equality2_axiom',axiom,(
    ! [V_f: ( $real > $real > $o ),V_Ss: ( 'ListOf' @ '2d.Shape' )] :
      ( ( ( '2d.set-of-cfun/1' @ V_f )
        = ( '2d.intersection/1' @ V_Ss ) )
    <=> ( '2d._expand_shape_eq/2' @ ( '2d.set-of-cfun/1' @ V_f ) @ ( '2d.intersection/1' @ V_Ss ) ) ) )).

thf('2d.def_cfun_shape_union_equality_axiom',axiom,(
    ! [V_f: ( $real > $real > $o ),V_S1: '2d.Shape',V_S2: '2d.Shape'] :
      ( ( ( '2d.set-of-cfun/1' @ V_f )
        = ( '2d.union/2' @ V_S1 @ V_S2 ) )
    <=> ( '2d._expand_shape_eq/2' @ ( '2d.set-of-cfun/1' @ V_f ) @ ( '2d.union/2' @ V_S1 @ V_S2 ) ) ) )).

thf('2d.def_cfun_shape_union_equality2_axiom',axiom,(
    ! [V_f: ( $real > $real > $o ),V_Ss: ( 'ListOf' @ '2d.Shape' )] :
      ( ( ( '2d.set-of-cfun/1' @ V_f )
        = ( '2d.union/1' @ V_Ss ) )
    <=> ( '2d._expand_shape_eq/2' @ ( '2d.set-of-cfun/1' @ V_f ) @ ( '2d.union/1' @ V_Ss ) ) ) )).

thf('2d.def_cfun_shape_circle_equality_axiom',axiom,(
    ! [V_r: $real,V_c: '2d.Point',V_f: ( $real > $real > $o )] :
      ( ( '2d.circle-type/1' @ ( '2d.circle/2' @ V_c @ V_r ) )
     => ( ( ( '2d.set-of-cfun/1' @ V_f )
          = ( '2d.circle/2' @ V_c @ V_r ) )
      <=> ( '2d._expand_shape_eq/2' @ ( '2d.set-of-cfun/1' @ V_f ) @ ( '2d.circle/2' @ V_c @ V_r ) ) ) ) )).

thf('2d.def_cfun_shape_arc_equality_axiom',axiom,(
    ! [V_f: ( $real > $real > $o ),V_c: '2d.Point',V_r: $real,V_b: $real,V_e: $real] :
      ( ( ( '2d.set-of-cfun/1' @ V_f )
        = ( '2d.arc/4' @ V_c @ V_r @ V_b @ V_e ) )
    <=> ( '2d._expand_shape_eq/2' @ ( '2d.set-of-cfun/1' @ V_f ) @ ( '2d.arc/4' @ V_c @ V_r @ V_b @ V_e ) ) ) )).

thf('2d.def_cfun_shape_graph_equality_axiom',axiom,(
    ! [V_f: ( $real > $real > $o ),V_g: 'R2R'] :
      ( ( ( '2d.set-of-cfun/1' @ V_f )
        = ( '2d.graph-of/1' @ V_g ) )
    <=> ( '2d._expand_shape_eq/2' @ ( '2d.set-of-cfun/1' @ V_f ) @ ( '2d.graph-of/1' @ V_g ) ) ) )).

thf('2d.def_graph_of_implicit_function_equality_axiom',axiom,(
    ! [V_f: ( $real > $real > $real ),V_g: ( $real > $real > $real )] :
      ( ( ( '2d.graph-of-implicit-function/1' @ V_f )
        = ( '2d.graph-of-implicit-function/1' @ V_g ) )
    <=> ( V_f = V_g ) ) )).

thf('2d.def-intersection-to-cfun_axiom',axiom,(
    ! [V_f1: ( $real > $real > $o ),V_f2: ( $real > $real > $o )] :
      ( ( '2d.intersection/2' @ ( '2d.set-of-cfun/1' @ V_f1 ) @ ( '2d.set-of-cfun/1' @ V_f2 ) )
      = ( '2d.set-of-cfun/1'
        @ ^ [V_x: $real,V_y: $real] :
            ( ( V_f1 @ V_x @ V_y )
            & ( V_f2 @ V_x @ V_y ) ) ) ) )).

thf('2d.def-intersection-of-square-cfun_axiom',axiom,(
    ! [V_f: ( $real > $real > $o ),V_S: '2d.Point',V_R: '2d.Point',V_Q: '2d.Point',V_P: '2d.Point'] :
      ( ( '2d.square-type/1' @ ( '2d.square/4' @ V_P @ V_Q @ V_R @ V_S ) )
     => ( ( '2d.intersection/2' @ ( '2d.square/4' @ V_P @ V_Q @ V_R @ V_S ) @ ( '2d.set-of-cfun/1' @ V_f ) )
        = ( '2d.set-of-cfun/1'
          @ ^ [V_x: $real,V_y: $real] :
              ( ( V_f @ V_x @ V_y )
              & ? [V_t1: $real,V_t2: $real,V_u1: $real,V_u2: $real] :
                  ( ( $lesseq @ 0.0 @ V_t1 )
                  & ( $lesseq @ 0.0 @ V_t2 )
                  & ( $lesseq @ 0.0 @ V_u1 )
                  & ( $lesseq @ 0.0 @ V_u2 )
                  & ( ( ( '2d.point/2' @ V_x @ V_y )
                      = ( '2d.vec->point/1' @ ( '2d.v+/2' @ ( '2d.sv*/2' @ V_t1 @ ( '2d.vec/2' @ '2d.origin/0' @ V_P ) ) @ ( '2d.v+/2' @ ( '2d.sv*/2' @ V_t2 @ ( '2d.vec/2' @ '2d.origin/0' @ V_Q ) ) @ ( '2d.sv*/2' @ ( $difference @ 1.0 @ ( $sum @ V_t1 @ V_t2 ) ) @ ( '2d.vec/2' @ '2d.origin/0' @ V_R ) ) ) ) ) )
                    | ( ( '2d.point/2' @ V_x @ V_y )
                      = ( '2d.vec->point/1' @ ( '2d.v+/2' @ ( '2d.sv*/2' @ V_u1 @ ( '2d.vec/2' @ '2d.origin/0' @ V_R ) ) @ ( '2d.v+/2' @ ( '2d.sv*/2' @ V_u2 @ ( '2d.vec/2' @ '2d.origin/0' @ V_S ) ) @ ( '2d.sv*/2' @ ( $difference @ 1.0 @ ( $sum @ V_u1 @ V_u2 ) ) @ ( '2d.vec/2' @ '2d.origin/0' @ V_P ) ) ) ) ) ) ) ) ) ) ) ) )).

thf('2d.def-cfun-to-tail-in-intersection-list1_axiom',axiom,(
    ! [V_f: ( $real > $real > $o ),V_S1: '2d.Shape'] :
      ( ( '2d.intersection/2' @ ( '2d.set-of-cfun/1' @ V_f ) @ V_S1 )
      = ( '2d.intersection/2' @ V_S1 @ ( '2d.set-of-cfun/1' @ V_f ) ) ) )).

thf('2d.def-cfun-to-tail-in-intersection-list2_axiom',axiom,(
    ! [V_f: ( $real > $real > $o ),V_S1: '2d.Shape',V_S2: '2d.Shape'] :
      ( ( '2d.intersection/2' @ ( '2d.set-of-cfun/1' @ V_f ) @ ( '2d.intersection/2' @ V_S1 @ V_S2 ) )
      = ( '2d.intersection/2' @ V_S1 @ ( '2d.intersection/2' @ ( '2d.set-of-cfun/1' @ V_f ) @ V_S2 ) ) ) )).

thf('2d.area-enclosed-by/2_type',type,(
    '2d.area-enclosed-by/2': ( 'ListOf' @ ( '2d.Point' > $o ) ) > ( 'Unit' > $o ) > $real )).

thf('2d.area-enclosed-by-within/3_type',type,(
    '2d.area-enclosed-by-within/3': ( 'ListOf' @ ( '2d.Point' > $o ) ) > ( '2d.Point' > $o ) > ( 'Unit' > $o ) > $real )).

thf('2d.def_area_of_enclosed_shape_axiom',axiom,(
    ! [V_shapes: ( 'ListOf' @ ( '2d.Point' > $o ) )] :
      ( ( '2d.area-of/1' @ ( '2d.shape-enclosed-by-cpfun/1' @ V_shapes ) )
      = ( '2d.area-enclosed-by/2' @ V_shapes
        @ ^ [V__: 'Unit'] : $true ) ) )).

thf('2d.def_area_of_enclosed_shape_with_restriction_axiom',axiom,(
    ! [V_boundaries: ( 'ListOf' @ ( '2d.Point' > $o ) ),V_shape: ( '2d.Point' > $o )] :
      ( ( '2d.area-of/1' @ ( '2d.shape-enclosed-by-within/2' @ V_boundaries @ V_shape ) )
      = ( '2d.area-enclosed-by-within/3' @ V_boundaries @ V_shape
        @ ^ [V__: 'Unit'] : $true ) ) )).

thf('2d.def_area_of_enclosed_shape_with_restriction2_axiom',axiom,(
    ! [V_shapes: ( 'ListOf' @ ( '2d.Point' > $o ) ),V_r: ( $real > $real > $o )] :
      ( ( '2d.area-of/1' @ ( '2d.intersection/2' @ ( '2d.set-of-cfun/1' @ V_r ) @ ( '2d.shape-enclosed-by-cpfun/1' @ V_shapes ) ) )
      = ( '2d.area-of/1' @ ( '2d.intersection/2' @ ( '2d.shape-enclosed-by-cpfun/1' @ V_shapes ) @ ( '2d.set-of-cfun/1' @ V_r ) ) ) ) )).

thf('2d.def-1st-quadrant_axiom',axiom,
    ( '2d.1st-quadrant/0'
    = ( '2d.set-of-cfun/1'
      @ ^ [V_x: $real,V_y: $real] :
          ( ( $greater @ V_x @ 0.0 )
          & ( $greater @ V_y @ 0.0 ) ) ) )).

thf('2d.def-2nd-quadrant_axiom',axiom,
    ( '2d.2nd-quadrant/0'
    = ( '2d.set-of-cfun/1'
      @ ^ [V_x: $real,V_y: $real] :
          ( ( $less @ V_x @ 0.0 )
          & ( $greater @ V_y @ 0.0 ) ) ) )).

thf('2d.def-3rd-quadrant_axiom',axiom,
    ( '2d.3rd-quadrant/0'
    = ( '2d.set-of-cfun/1'
      @ ^ [V_x: $real,V_y: $real] :
          ( ( $less @ V_x @ 0.0 )
          & ( $less @ V_y @ 0.0 ) ) ) )).

thf('2d.def-4th-quadrant_axiom',axiom,
    ( '2d.4th-quadrant/0'
    = ( '2d.set-of-cfun/1'
      @ ^ [V_x: $real,V_y: $real] :
          ( ( $greater @ V_x @ 0.0 )
          & ( $less @ V_y @ 0.0 ) ) ) )).

thf('2d.def-matrix-addtion-2x2_axiom',axiom,(
    ! [V_a: $real,V_b: $real,V_c: $real,V_d: $real,V_A: $real,V_B: $real,V_C: $real,V_D: $real] :
      ( ( '2d.m+/2' @ ( '2d.matrix/4' @ V_a @ V_b @ V_c @ V_d ) @ ( '2d.matrix/4' @ V_A @ V_B @ V_C @ V_D ) )
      = ( '2d.matrix/4' @ ( $sum @ V_a @ V_A ) @ ( $sum @ V_b @ V_B ) @ ( $sum @ V_c @ V_C ) @ ( $sum @ V_d @ V_D ) ) ) )).

thf('2d.def-matrix-minus-2x2_axiom',axiom,(
    ! [V_a: $real,V_b: $real,V_c: $real,V_d: $real,V_A: $real,V_B: $real,V_C: $real,V_D: $real] :
      ( ( '2d.m-/2' @ ( '2d.matrix/4' @ V_a @ V_b @ V_c @ V_d ) @ ( '2d.matrix/4' @ V_A @ V_B @ V_C @ V_D ) )
      = ( '2d.matrix/4' @ ( $difference @ V_a @ V_A ) @ ( $difference @ V_b @ V_B ) @ ( $difference @ V_c @ V_C ) @ ( $difference @ V_d @ V_D ) ) ) )).

thf('2d.def-matrix-negative-2x2_axiom',axiom,(
    ! [V_a: $real,V_b: $real,V_c: $real,V_d: $real] :
      ( ( '2d.m-/1' @ ( '2d.matrix/4' @ V_a @ V_b @ V_c @ V_d ) )
      = ( '2d.matrix/4' @ ( $uminus @ V_a ) @ ( $uminus @ V_b ) @ ( $uminus @ V_c ) @ ( $uminus @ V_d ) ) ) )).

thf('2d.def-matrix-times-2x2_axiom',axiom,(
    ! [V_a: $real,V_b: $real,V_c: $real,V_d: $real,V_A: $real,V_B: $real,V_C: $real,V_D: $real] :
      ( ( '2d.m*/2' @ ( '2d.matrix/4' @ V_a @ V_b @ V_c @ V_d ) @ ( '2d.matrix/4' @ V_A @ V_B @ V_C @ V_D ) )
      = ( '2d.matrix/4' @ ( $sum @ ( $product @ V_a @ V_A ) @ ( $product @ V_b @ V_C ) ) @ ( $sum @ ( $product @ V_a @ V_B ) @ ( $product @ V_b @ V_D ) ) @ ( $sum @ ( $product @ V_c @ V_A ) @ ( $product @ V_d @ V_C ) ) @ ( $sum @ ( $product @ V_c @ V_B ) @ ( $product @ V_d @ V_D ) ) ) ) )).

thf('2d.def-matrix-scalar-mult-2x2_axiom',axiom,(
    ! [V_s: $real,V_a: $real,V_b: $real,V_c: $real,V_d: $real] :
      ( ( '2d.sm*/2' @ V_s @ ( '2d.matrix/4' @ V_a @ V_b @ V_c @ V_d ) )
      = ( '2d.matrix/4' @ ( $product @ V_s @ V_a ) @ ( $product @ V_s @ V_b ) @ ( $product @ V_s @ V_c ) @ ( $product @ V_s @ V_d ) ) ) )).

thf('2d.def-matrix-vec-mult-2x2_axiom',axiom,(
    ! [V_a: $real,V_b: $real,V_c: $real,V_d: $real,V_x: $real,V_y: $real] :
      ( ( '2d.mv*/2' @ ( '2d.matrix/4' @ V_a @ V_b @ V_c @ V_d ) @ ( '2d.vec2d/2' @ V_x @ V_y ) )
      = ( '2d.vec2d/2' @ ( $sum @ ( $product @ V_a @ V_x ) @ ( $product @ V_b @ V_y ) ) @ ( $sum @ ( $product @ V_c @ V_x ) @ ( $product @ V_d @ V_y ) ) ) ) )).

thf('2d.def-identity-matrix-2x2_axiom',axiom,
    ( '2d.identity-matrix/0'
    = ( '2d.matrix/4' @ 1.0 @ 0.0 @ 0.0 @ 1.0 ) )).

thf('2d.def-zero-matrix-2x2_axiom',axiom,
    ( '2d.zero-matrix/0'
    = ( '2d.matrix/4' @ 0.0 @ 0.0 @ 0.0 @ 0.0 ) )).

thf('2d.def-is-non-singular_axiom',axiom,(
    ! [V_a: $real,V_b: $real,V_c: $real,V_d: $real] :
      ( ( '2d.is-non-singular/1' @ ( '2d.matrix/4' @ V_a @ V_b @ V_c @ V_d ) )
    <=> ( 0.0
       != ( $difference @ ( $product @ V_a @ V_d ) @ ( $product @ V_b @ V_c ) ) ) ) )).

thf('2d.def-inverse-of_axiom',axiom,(
    ! [V_a: $real,V_b: $real,V_c: $real,V_d: $real] :
      ( ( '2d.inverse-of/1' @ ( '2d.matrix/4' @ V_a @ V_b @ V_c @ V_d ) )
      = ( '2d.sm*/2' @ ( $quotient @ 1.0 @ ( $difference @ ( $product @ V_a @ V_d ) @ ( $product @ V_b @ V_c ) ) ) @ ( '2d.matrix/4' @ V_d @ ( $uminus @ V_b ) @ ( $uminus @ V_c ) @ V_a ) ) ) )).

thf('2d.def-mat-shape*-line_axiom',axiom,(
    ! [V_q: '2d.Point',V_p: '2d.Point',V_M: '2d.Matrix'] :
      ( ( '2d.line-type/1' @ ( '2d.line/2' @ V_p @ V_q ) )
     => ( ( '2d.mat-shape*/2' @ V_M @ ( '2d.line/2' @ V_p @ V_q ) )
        = ( '2d.line/2' @ ( '2d.vec->point/1' @ ( '2d.mv*/2' @ V_M @ ( '2d.vec/2' @ '2d.origin/0' @ V_p ) ) ) @ ( '2d.vec->point/1' @ ( '2d.mv*/2' @ V_M @ ( '2d.vec/2' @ '2d.origin/0' @ V_q ) ) ) ) ) ) )).

thf('2d.def-mat-shape*-general_axiom',axiom,(
    ! [V_M: '2d.Matrix',V_S: '2d.Shape'] :
      ( ( '2d.mat-shape*/2' @ V_M @ V_S )
      = ( '2d.shape-of-cpfun/1'
        @ ^ [V_p: '2d.Point'] :
            ( '2d.on/2' @ ( '2d.vec->point/1' @ ( '2d.mv*/2' @ ( '2d.inverse-of/1' @ V_M ) @ ( '2d.vec/2' @ '2d.origin/0' @ V_p ) ) ) @ V_S ) ) ) )).

thf('2d.def-matrix-equality_axiom',axiom,(
    ! [V_a: $real,V_b: $real,V_c: $real,V_d: $real,V_A: $real,V_B: $real,V_C: $real,V_D: $real] :
      ( ( ( '2d.matrix/4' @ V_a @ V_b @ V_c @ V_d )
        = ( '2d.matrix/4' @ V_A @ V_B @ V_C @ V_D ) )
    <=> ( ( V_a = V_A )
        & ( V_b = V_B )
        & ( V_c = V_C )
        & ( V_d = V_D ) ) ) )).

thf('2d.def-transposed-matrix_axiom',axiom,(
    ! [V_a: $real,V_b: $real,V_c: $real,V_d: $real] :
      ( ( '2d.transposed-matrix/1' @ ( '2d.matrix/4' @ V_a @ V_b @ V_c @ V_d ) )
      = ( '2d.matrix/4' @ V_a @ V_c @ V_b @ V_d ) ) )).

thf('2d.def-orthogonal-matrix_axiom',axiom,(
    ! [V_M: '2d.Matrix'] :
      ( ( '2d.is-orthogonal-matrix/1' @ V_M )
    <=> ( '2d.identity-matrix/0'
        = ( '2d.m*/2' @ V_M @ ( '2d.transposed-matrix/1' @ V_M ) ) ) ) )).

thf('2d.def-focus-of-ellipse_axiom',axiom,(
    ! [V_ap: $real,V_f2: '2d.Point',V_f1: '2d.Point',V_p: '2d.Point'] :
      ( ( '2d.ellipse-type/1' @ ( '2d.ellipse/3' @ V_f1 @ V_f2 @ V_ap ) )
     => ( ( '2d.is-focus-of/2' @ V_p @ ( '2d.ellipse/3' @ V_f1 @ V_f2 @ V_ap ) )
      <=> ( ( V_p = V_f1 )
          | ( V_p = V_f2 ) ) ) ) )).

thf('2d.def-focus-of-parabola_axiom',axiom,(
    ! [V_d: '2d.Point',V_f: '2d.Point',V_p: '2d.Point'] :
      ( ( '2d.parabola-type/1' @ ( '2d.parabola/2' @ V_f @ V_d ) )
     => ( ( '2d.is-focus-of/2' @ V_p @ ( '2d.parabola/2' @ V_f @ V_d ) )
      <=> ( V_p = V_f ) ) ) )).

thf('2d.def-focus-of-hyperbola_axiom',axiom,(
    ! [V_ap: $real,V_f2: '2d.Point',V_f1: '2d.Point',V_p: '2d.Point'] :
      ( ( '2d.hyperbola-type/1' @ ( '2d.hyperbola/3' @ V_f1 @ V_f2 @ V_ap ) )
     => ( ( '2d.is-focus-of/2' @ V_p @ ( '2d.hyperbola/3' @ V_f1 @ V_f2 @ V_ap ) )
      <=> ( ( V_p = V_f1 )
          | ( V_p = V_f2 ) ) ) ) )).

thf('2d.def-foci-of-ellipse_axiom',axiom,(
    ! [V_ap: $real,V_f2: '2d.Point',V_f1: '2d.Point',V_ps: ( 'ListOf' @ '2d.Point' )] :
      ( ( '2d.ellipse-type/1' @ ( '2d.ellipse/3' @ V_f1 @ V_f2 @ V_ap ) )
     => ( ( '2d.are-foci-of/2' @ V_ps @ ( '2d.ellipse/3' @ V_f1 @ V_f2 @ V_ap ) )
      <=> ( ( V_ps
            = ( 'cons/2' @ '2d.Point' @ V_f1 @ ( 'cons/2' @ '2d.Point' @ V_f2 @ ( 'nil/0' @ '2d.Point' ) ) ) )
          | ( V_ps
            = ( 'cons/2' @ '2d.Point' @ V_f2 @ ( 'cons/2' @ '2d.Point' @ V_f1 @ ( 'nil/0' @ '2d.Point' ) ) ) ) ) ) ) )).

thf('2d.def-foci-of-parabola_axiom',axiom,(
    ! [V_d: '2d.Point',V_f: '2d.Point',V_ps: ( 'ListOf' @ '2d.Point' )] :
      ( ( '2d.parabola-type/1' @ ( '2d.parabola/2' @ V_f @ V_d ) )
     => ( ( '2d.are-foci-of/2' @ V_ps @ ( '2d.parabola/2' @ V_f @ V_d ) )
      <=> ( V_ps
          = ( 'cons/2' @ '2d.Point' @ V_f @ ( 'nil/0' @ '2d.Point' ) ) ) ) ) )).

thf('2d.def-foci-of-hyperbola_axiom',axiom,(
    ! [V_ap: $real,V_f2: '2d.Point',V_f1: '2d.Point',V_ps: ( 'ListOf' @ '2d.Point' )] :
      ( ( '2d.hyperbola-type/1' @ ( '2d.hyperbola/3' @ V_f1 @ V_f2 @ V_ap ) )
     => ( ( '2d.are-foci-of/2' @ V_ps @ ( '2d.hyperbola/3' @ V_f1 @ V_f2 @ V_ap ) )
      <=> ( ( V_ps
            = ( 'cons/2' @ '2d.Point' @ V_f1 @ ( 'cons/2' @ '2d.Point' @ V_f2 @ ( 'nil/0' @ '2d.Point' ) ) ) )
          | ( V_ps
            = ( 'cons/2' @ '2d.Point' @ V_f2 @ ( 'cons/2' @ '2d.Point' @ V_f1 @ ( 'nil/0' @ '2d.Point' ) ) ) ) ) ) ) )).

thf('2d.def-focus-of_axiom',axiom,(
    ! [V_p: '2d.Point',V_s1: '2d.Shape'] :
      ( ( '2d.is-focus-of/2' @ V_p @ V_s1 )
    <=> ? [V_s0: '2d.Shape',V_v: '2d.Vector',V_m: $real,V_M: '2d.Matrix',V_a: $real,V_b: $real] :
          ( ( ( '2d.is-orthogonal-matrix/1' @ V_M )
            & ( '2d.translate/4' @ V_s1 @ V_v @ V_m @ V_s0 )
            & ( ( '2d.mat-shape*/2' @ V_M @ V_s0 )
              = ( '2d.shape-of-cpfun/1'
                @ ^ [V_q: '2d.Point'] :
                    ( 1.0
                    = ( $difference @ ( $product @ V_a @ ( '^/2' @ ( '2d.x-coord/1' @ V_q ) @ 2.0 ) ) @ ( $product @ V_b @ ( '^/2' @ ( '2d.y-coord/1' @ V_q ) @ 2.0 ) ) ) ) ) )
            & ( ( V_p
                = ( '2d.vec->point/1' @ ( '2d.v-/2' @ ( '2d.mv*/2' @ ( '2d.inverse-of/1' @ V_M ) @ ( '2d.vec2d/2' @ ( 'sqrt/1' @ ( $sum @ ( $quotient @ 1.0 @ V_a ) @ ( $quotient @ 1.0 @ V_b ) ) ) @ 0.0 ) ) @ ( '2d.vec2d/2' @ ( $product @ V_m @ ( $quotient @ ( '2d.vec-x-coord/1' @ V_v ) @ ( 'sqrt/1' @ ( $sum @ ( '^/2' @ ( '2d.vec-x-coord/1' @ V_v ) @ 2.0 ) @ ( '^/2' @ ( '2d.vec-y-coord/1' @ V_v ) @ 2.0 ) ) ) ) ) @ ( $product @ V_m @ ( $quotient @ ( '2d.vec-y-coord/1' @ V_v ) @ ( 'sqrt/1' @ ( $sum @ ( '^/2' @ ( '2d.vec-x-coord/1' @ V_v ) @ 2.0 ) @ ( '^/2' @ ( '2d.vec-y-coord/1' @ V_v ) @ 2.0 ) ) ) ) ) ) ) ) )
              | ( V_p
                = ( '2d.vec->point/1' @ ( '2d.v-/2' @ ( '2d.mv*/2' @ ( '2d.inverse-of/1' @ V_M ) @ ( '2d.vec2d/2' @ ( $uminus @ ( 'sqrt/1' @ ( $sum @ ( $quotient @ 1.0 @ V_a ) @ ( $quotient @ 1.0 @ V_b ) ) ) ) @ 0.0 ) ) @ ( '2d.vec2d/2' @ ( $product @ V_m @ ( $quotient @ ( '2d.vec-x-coord/1' @ V_v ) @ ( 'sqrt/1' @ ( $sum @ ( '^/2' @ ( '2d.vec-x-coord/1' @ V_v ) @ 2.0 ) @ ( '^/2' @ ( '2d.vec-y-coord/1' @ V_v ) @ 2.0 ) ) ) ) ) @ ( $product @ V_m @ ( $quotient @ ( '2d.vec-y-coord/1' @ V_v ) @ ( 'sqrt/1' @ ( $sum @ ( '^/2' @ ( '2d.vec-x-coord/1' @ V_v ) @ 2.0 ) @ ( '^/2' @ ( '2d.vec-y-coord/1' @ V_v ) @ 2.0 ) ) ) ) ) ) ) ) ) ) )
          | ( ( '2d.is-orthogonal-matrix/1' @ V_M )
            & ( '2d.translate/4' @ V_s1 @ V_v @ V_m @ V_s0 )
            & ( ( '2d.mat-shape*/2' @ V_M @ V_s0 )
              = ( '2d.shape-of-cpfun/1'
                @ ^ [V_p_dot_0: '2d.Point'] :
                    ( 1.0
                    = ( $sum @ ( $product @ V_a @ ( '^/2' @ ( '2d.x-coord/1' @ V_p_dot_0 ) @ 2.0 ) ) @ ( $product @ V_b @ ( '^/2' @ ( '2d.y-coord/1' @ V_p_dot_0 ) @ 2.0 ) ) ) ) ) )
            & ( ( V_p
                = ( '2d.vec->point/1' @ ( '2d.v-/2' @ ( '2d.mv*/2' @ ( '2d.inverse-of/1' @ V_M ) @ ( '2d.vec2d/2' @ ( 'sqrt/1' @ ( $difference @ ( $quotient @ 1.0 @ V_a ) @ ( $quotient @ 1.0 @ V_b ) ) ) @ 0.0 ) ) @ ( '2d.vec2d/2' @ ( $product @ V_m @ ( $quotient @ ( '2d.vec-x-coord/1' @ V_v ) @ ( 'sqrt/1' @ ( $sum @ ( '^/2' @ ( '2d.vec-x-coord/1' @ V_v ) @ 2.0 ) @ ( '^/2' @ ( '2d.vec-y-coord/1' @ V_v ) @ 2.0 ) ) ) ) ) @ ( $product @ V_m @ ( $quotient @ ( '2d.vec-y-coord/1' @ V_v ) @ ( 'sqrt/1' @ ( $sum @ ( '^/2' @ ( '2d.vec-x-coord/1' @ V_v ) @ 2.0 ) @ ( '^/2' @ ( '2d.vec-y-coord/1' @ V_v ) @ 2.0 ) ) ) ) ) ) ) ) )
              | ( V_p
                = ( '2d.vec->point/1' @ ( '2d.v-/2' @ ( '2d.mv*/2' @ ( '2d.inverse-of/1' @ V_M ) @ ( '2d.vec2d/2' @ ( $uminus @ ( 'sqrt/1' @ ( $difference @ ( $quotient @ 1.0 @ V_a ) @ ( $quotient @ 1.0 @ V_b ) ) ) ) @ 0.0 ) ) @ ( '2d.vec2d/2' @ ( $product @ V_m @ ( $quotient @ ( '2d.vec-x-coord/1' @ V_v ) @ ( 'sqrt/1' @ ( $sum @ ( '^/2' @ ( '2d.vec-x-coord/1' @ V_v ) @ 2.0 ) @ ( '^/2' @ ( '2d.vec-y-coord/1' @ V_v ) @ 2.0 ) ) ) ) ) @ ( $product @ V_m @ ( $quotient @ ( '2d.vec-y-coord/1' @ V_v ) @ ( 'sqrt/1' @ ( $sum @ ( '^/2' @ ( '2d.vec-x-coord/1' @ V_v ) @ 2.0 ) @ ( '^/2' @ ( '2d.vec-y-coord/1' @ V_v ) @ 2.0 ) ) ) ) ) ) ) ) ) ) ) ) ) )).

thf('2d.def-translation-of-parabola_axiom',axiom,(
    ! [V_c: $real,V_b: $real,V_a: $real,V_v: '2d.Vector'] :
      ( ( '2d.translate/2' @ ( '2d.graph-of/1' @ ( 'poly-fun/1' @ ( 'cons/2' @ $real @ V_c @ ( 'cons/2' @ $real @ V_b @ ( 'cons/2' @ $real @ V_a @ ( 'nil/0' @ $real ) ) ) ) ) ) @ V_v )
      = ( '2d.graph-of/1' @ ( 'poly-fun/1' @ ( 'cons/2' @ $real @ ( $sum @ ( $product @ V_a @ ( '^/2' @ ( '2d.vec-x-coord/1' @ V_v ) @ 2.0 ) ) @ ( $sum @ ( $uminus @ ( $product @ V_b @ ( '2d.vec-x-coord/1' @ V_v ) ) ) @ ( $sum @ V_c @ ( '2d.vec-y-coord/1' @ V_v ) ) ) ) @ ( 'cons/2' @ $real @ ( $difference @ V_b @ ( $product @ 2.0 @ ( $product @ V_a @ ( '2d.vec-x-coord/1' @ V_v ) ) ) ) @ ( 'cons/2' @ $real @ V_a @ ( 'nil/0' @ $real ) ) ) ) ) ) ) )).

thf('2d.def-translation-of-fun-graph_axiom',axiom,(
    ! [V_f: 'R2R',V_v: '2d.Vector'] :
      ( ( '2d.translate/2' @ ( '2d.graph-of/1' @ V_f ) @ V_v )
      = ( '2d.graph-of/1'
        @ ( 'fun/1'
          @ ^ [V_x: $real] :
              ( $sum @ ( 'funapp/2' @ V_f @ ( $difference @ V_x @ ( '2d.vec-x-coord/1' @ V_v ) ) ) @ ( '2d.vec-y-coord/1' @ V_v ) ) ) ) ) )).

thf('2d.def-are-intersection-points-of-line-and-circle_axiom',axiom,(
    ! [V_Ps: ( 'ListOf' @ '2d.Point' ),V_q: '2d.Point',V_p: '2d.Point',V_r: $real,V_c: '2d.Point'] :
      ( ( ( '2d.line-type/1' @ ( '2d.line/2' @ V_p @ V_q ) )
        & ( '2d.circle-type/1' @ ( '2d.circle/2' @ V_c @ V_r ) ) )
     => ( ( '2d.are-intersection-points-of/2' @ V_Ps @ ( 'cons/2' @ '2d.Shape' @ ( '2d.line/2' @ V_p @ V_q ) @ ( 'cons/2' @ '2d.Shape' @ ( '2d.circle/2' @ V_c @ V_r ) @ ( 'nil/0' @ '2d.Shape' ) ) ) )
      <=> ( ( ( V_Ps
              = ( 'nil/0' @ '2d.Point' ) )
            & ~ ( '2d.intersect/2' @ ( '2d.circle/2' @ V_c @ V_r ) @ ( '2d.line/2' @ V_p @ V_q ) ) )
          | ? [V_P_dot_0: '2d.Point'] :
              ( ( V_Ps
                = ( 'cons/2' @ '2d.Point' @ V_P_dot_0 @ ( 'nil/0' @ '2d.Point' ) ) )
              & ( '2d.tangent/2' @ ( '2d.circle/2' @ V_c @ V_r ) @ ( '2d.line/2' @ V_p @ V_q ) ) )
          | ? [V_P: '2d.Point',V_Q: '2d.Point'] :
              ( ( V_Ps
                = ( 'cons/2' @ '2d.Point' @ V_P @ ( 'cons/2' @ '2d.Point' @ V_Q @ ( 'nil/0' @ '2d.Point' ) ) ) )
              & ( '2d.intersect/3' @ ( '2d.circle/2' @ V_c @ V_r ) @ ( '2d.line/2' @ V_p @ V_q ) @ V_P )
              & ( '2d.intersect/3' @ ( '2d.circle/2' @ V_c @ V_r ) @ ( '2d.line/2' @ V_p @ V_q ) @ V_Q )
              & ( V_P != V_Q ) ) ) ) ) )).

thf('2d.def-are-intersection-points-of-circle-and-line_axiom',axiom,(
    ! [V_Ps: ( 'ListOf' @ '2d.Point' ),V_q: '2d.Point',V_p: '2d.Point',V_r: $real,V_c: '2d.Point'] :
      ( ( ( '2d.circle-type/1' @ ( '2d.circle/2' @ V_c @ V_r ) )
        & ( '2d.line-type/1' @ ( '2d.line/2' @ V_p @ V_q ) ) )
     => ( ( '2d.are-intersection-points-of/2' @ V_Ps @ ( 'cons/2' @ '2d.Shape' @ ( '2d.circle/2' @ V_c @ V_r ) @ ( 'cons/2' @ '2d.Shape' @ ( '2d.line/2' @ V_p @ V_q ) @ ( 'nil/0' @ '2d.Shape' ) ) ) )
      <=> ( '2d.are-intersection-points-of/2' @ V_Ps @ ( 'cons/2' @ '2d.Shape' @ ( '2d.line/2' @ V_p @ V_q ) @ ( 'cons/2' @ '2d.Shape' @ ( '2d.circle/2' @ V_c @ V_r ) @ ( 'nil/0' @ '2d.Shape' ) ) ) ) ) ) )).

thf('2d.def-are-intersection-points-of-seg-and-circle_axiom',axiom,(
    ! [V_Ps: ( 'ListOf' @ '2d.Point' ),V_q: '2d.Point',V_p: '2d.Point',V_r: $real,V_c: '2d.Point'] :
      ( ( ( '2d.segment-type/1' @ ( '2d.seg/2' @ V_p @ V_q ) )
        & ( '2d.circle-type/1' @ ( '2d.circle/2' @ V_c @ V_r ) ) )
     => ( ( '2d.are-intersection-points-of/2' @ V_Ps @ ( 'cons/2' @ '2d.Shape' @ ( '2d.seg/2' @ V_p @ V_q ) @ ( 'cons/2' @ '2d.Shape' @ ( '2d.circle/2' @ V_c @ V_r ) @ ( 'nil/0' @ '2d.Shape' ) ) ) )
      <=> ( ( ( V_Ps
              = ( 'nil/0' @ '2d.Point' ) )
            & ~ ( '2d.intersect/2' @ ( '2d.circle/2' @ V_c @ V_r ) @ ( '2d.seg/2' @ V_p @ V_q ) ) )
          | ? [V_P_dot_0: '2d.Point'] :
              ( ( V_Ps
                = ( 'cons/2' @ '2d.Point' @ V_P_dot_0 @ ( 'nil/0' @ '2d.Point' ) ) )
              & ( '2d.tangent/2' @ ( '2d.circle/2' @ V_c @ V_r ) @ ( '2d.seg/2' @ V_p @ V_q ) ) )
          | ? [V_P: '2d.Point',V_Q: '2d.Point'] :
              ( ( V_Ps
                = ( 'cons/2' @ '2d.Point' @ V_P @ ( 'cons/2' @ '2d.Point' @ V_Q @ ( 'nil/0' @ '2d.Point' ) ) ) )
              & ( '2d.intersect/3' @ ( '2d.circle/2' @ V_c @ V_r ) @ ( '2d.seg/2' @ V_p @ V_q ) @ V_P )
              & ( '2d.intersect/3' @ ( '2d.circle/2' @ V_c @ V_r ) @ ( '2d.seg/2' @ V_p @ V_q ) @ V_Q )
              & ( V_P != V_Q ) ) ) ) ) )).

thf('2d.def-are-intersection-points-of-circle-and-seg_axiom',axiom,(
    ! [V_Ps: ( 'ListOf' @ '2d.Point' ),V_q: '2d.Point',V_p: '2d.Point',V_r: $real,V_c: '2d.Point'] :
      ( ( ( '2d.circle-type/1' @ ( '2d.circle/2' @ V_c @ V_r ) )
        & ( '2d.segment-type/1' @ ( '2d.seg/2' @ V_p @ V_q ) ) )
     => ( ( '2d.are-intersection-points-of/2' @ V_Ps @ ( 'cons/2' @ '2d.Shape' @ ( '2d.circle/2' @ V_c @ V_r ) @ ( 'cons/2' @ '2d.Shape' @ ( '2d.seg/2' @ V_p @ V_q ) @ ( 'nil/0' @ '2d.Shape' ) ) ) )
      <=> ( '2d.are-intersection-points-of/2' @ V_Ps @ ( 'cons/2' @ '2d.Shape' @ ( '2d.seg/2' @ V_p @ V_q ) @ ( 'cons/2' @ '2d.Shape' @ ( '2d.circle/2' @ V_c @ V_r ) @ ( 'nil/0' @ '2d.Shape' ) ) ) ) ) ) )).

thf('2d.polygon-type_axiom',axiom,(
    ! [V_p: '2d.Shape'] :
      ( ( '2d.polygon-type/1' @ V_p )
    <=> ? [V_ps: ( 'ListOf' @ '2d.Point' )] :
          ( ( V_p
            = ( '2d.polygon/1' @ V_ps ) )
          & ( $lesseq @ 3 @ ( 'list-len/1' @ '2d.Point' @ V_ps ) ) ) ) )).

thf('2d.def_area_of_intersection_binary_axiom',axiom,(
    ! [V_shape1: '2d.Shape',V_shape2: '2d.Shape'] :
      ( ( '2d.area-of/1' @ ( '2d.intersection/2' @ V_shape1 @ V_shape2 ) )
      = ( '2d.area-of/1' @ ( '2d.shape-of-cpfun/1' @ ( '2d.char-fun-of/1' @ ( '2d.intersection/2' @ V_shape1 @ V_shape2 ) ) ) ) ) )).

thf('2d.def_area_of_intersection_list_axiom',axiom,(
    ! [V_list: ( 'ListOf' @ '2d.Shape' )] :
      ( ( '2d.area-of/1' @ ( '2d.intersection/1' @ V_list ) )
      = ( '2d.area-of/1' @ ( '2d.shape-of-cpfun/1' @ ( '2d.char-fun-of/1' @ ( '2d.intersection/1' @ V_list ) ) ) ) ) )).

thf('2d.def_area_of_union_binary_axiom',axiom,(
    ! [V_shape1: '2d.Shape',V_shape2: '2d.Shape'] :
      ( ( '2d.area-of/1' @ ( '2d.union/2' @ V_shape1 @ V_shape2 ) )
      = ( '2d.area-of/1' @ ( '2d.shape-of-cpfun/1' @ ( '2d.char-fun-of/1' @ ( '2d.union/2' @ V_shape1 @ V_shape2 ) ) ) ) ) )).

thf('2d.def_area_of_union_list_axiom',axiom,(
    ! [V_list: ( 'ListOf' @ '2d.Shape' )] :
      ( ( '2d.area-of/1' @ ( '2d.union/1' @ V_list ) )
      = ( '2d.area-of/1' @ ( '2d.shape-of-cpfun/1' @ ( '2d.char-fun-of/1' @ ( '2d.union/1' @ V_list ) ) ) ) ) )).

%-------------------------------------------------------------------------------
%----Overloaded concepts in 2D/3D geometry
%-------------------------------------------------------------------------------
thf('3d.circle-shape/1_type',type,(
    '3d.circle-shape/1': '3d.Shape' > '3d.Shape' )).

thf('3d.disk-shape/1_type',type,(
    '3d.disk-shape/1': '3d.Shape' > '3d.Shape' )).

thf('3d.arc-shape/1_type',type,(
    '3d.arc-shape/1': '3d.Shape' > '3d.Shape' )).

thf('3d.circular-sector-shape/1_type',type,(
    '3d.circular-sector-shape/1': '3d.Shape' > '3d.Shape' )).

thf('3d.def_is_shape_axiom',axiom,(
    ! [V_s: '3d.Shape'] :
      ( '3d.is-shape/1' @ V_s ) )).

thf('3d.def_is_point_axiom',axiom,(
    ! [V_p: '3d.Point'] :
      ( '3d.is-point/1' @ V_p ) )).

thf('3d.def_vec_perpendicular_axiom',axiom,(
    ! [V_v1: '3d.Vector',V_v2: '3d.Vector'] :
      ( ( '3d.vec-perpendicular/2' @ V_v1 @ V_v2 )
    <=> ( 0.0
        = ( '3d.inner-prod/2' @ V_v1 @ V_v2 ) ) ) )).

thf('3d.def_colinear_axiom',axiom,(
    ! [V_p0: '3d.Point',V_p1: '3d.Point',V_p2: '3d.Point'] :
      ( ( '3d.colinear/3' @ V_p0 @ V_p1 @ V_p2 )
    <=> ( '3d.vec-parallel/2' @ ( '3d.vec/2' @ V_p0 @ V_p1 ) @ ( '3d.vec/2' @ V_p0 @ V_p2 ) ) ) )).

thf('3d.def_vec_translate_axiom',axiom,(
    ! [V_P: '3d.Point',V_v: '3d.Vector'] :
      ( ( '3d.vec-translate/2' @ V_P @ V_v )
      = ( '3d.vec->point/1' @ ( '3d.v+/2' @ ( '3d.vec/2' @ '3d.origin/0' @ V_P ) @ V_v ) ) ) )).

thf('3d.def_converge_point_axiom',axiom,(
    ! [V_f: ( $int > '3d.Point' ),V_p0: '3d.Point'] :
      ( ( '3d.converge-point/2' @ V_f @ V_p0 )
    <=> ! [V_x: $real] :
        ? [V_l: $int] :
        ! [V_n: $int] :
          ( ( $less @ V_l @ V_n )
         => ( $less @ ( '3d.distance/2' @ V_p0 @ ( V_f @ V_n ) ) @ V_x ) ) ) )).

thf('3d.def_points_colinear_base_case_axiom',axiom,(
    ! [V_p0: '3d.Point',V_p1: '3d.Point'] :
      ( '3d.points-colinear/1' @ ( 'cons/2' @ '3d.Point' @ V_p0 @ ( 'cons/2' @ '3d.Point' @ V_p1 @ ( 'nil/0' @ '3d.Point' ) ) ) ) )).

thf('3d.def_points_colinear_axiom',axiom,(
    ! [V_p0: '3d.Point',V_p1: '3d.Point',V_p2: '3d.Point',V_ps: ( 'ListOf' @ '3d.Point' )] :
      ( ( '3d.points-colinear/1' @ ( 'cons/2' @ '3d.Point' @ V_p0 @ ( 'cons/2' @ '3d.Point' @ V_p1 @ ( 'cons/2' @ '3d.Point' @ V_p2 @ V_ps ) ) ) )
    <=> ( ( '3d.colinear/3' @ V_p0 @ V_p1 @ V_p2 )
        & ( '3d.points-colinear/1' @ ( 'cons/2' @ '3d.Point' @ V_p1 @ ( 'cons/2' @ '3d.Point' @ V_p2 @ V_ps ) ) ) ) ) )).

thf('3d.def_points_with_equal_interval_axiom',axiom,(
    ! [V_p0: '3d.Point',V_p1: '3d.Point',V_ps: ( 'ListOf' @ '3d.Point' )] :
      ( ( '3d.points-with-equal-interval/1' @ ( 'cons/2' @ '3d.Point' @ V_p0 @ ( 'cons/2' @ '3d.Point' @ V_p1 @ V_ps ) ) )
    <=> ( 'cyclic-all/2' @ '3d.Point'
        @ ^ [V_x: '3d.Point',V_y: '3d.Point',V_z: '3d.Point'] :
            ( ( '3d.distance^2/2' @ V_p0 @ V_p1 )
            = ( '3d.distance^2/2' @ V_x @ V_y ) )
        @ ( 'cons/2' @ '3d.Point' @ V_p0 @ ( 'cons/2' @ '3d.Point' @ V_p1 @ V_ps ) ) ) ) )).

thf('3d.def_points_bending_by_equal_angle_axiom',axiom,(
    ! [V_p0: '3d.Point',V_p1: '3d.Point',V_ps: ( 'ListOf' @ '3d.Point' )] :
      ( ( '3d.points-bending-by-equal-angle/1' @ ( 'cons/2' @ '3d.Point' @ V_p0 @ ( 'cons/2' @ '3d.Point' @ V_p1 @ V_ps ) ) )
    <=> ( 'cyclic-all/2' @ '3d.Point'
        @ ^ [V_x: '3d.Point',V_y: '3d.Point',V_z: '3d.Point'] :
            ( ( '3d.cos-of-angle/1' @ ( '3d.angle/3' @ ( 'last/1' @ '3d.Point' @ V_ps ) @ V_p0 @ V_p1 ) )
            = ( '3d.cos-of-angle/1' @ ( '3d.angle/3' @ V_x @ V_y @ V_z ) ) )
        @ ( 'cons/2' @ '3d.Point' @ V_p0 @ ( 'cons/2' @ '3d.Point' @ V_p1 @ V_ps ) ) ) ) )).

thf('3d.def_equidistant_axiom',axiom,(
    ! [V_p: '3d.Point',V_q: '3d.Point',V_r: '3d.Point'] :
      ( ( '3d.equidistant/3' @ V_p @ V_q @ V_r )
    <=> ( ( '3d.distance^2/2' @ V_p @ V_r )
        = ( '3d.distance^2/2' @ V_q @ V_r ) ) ) )).

thf('3d.def_equidistant_list_axiom',axiom,(
    ! [V_ps: ( 'ListOf' @ '3d.Point' ),V_q: '3d.Point'] :
      ( ( '3d.equidistant/2' @ V_ps @ V_q )
    <=> ( 'equal/1' @ $real
        @ ( 'map/2' @ '3d.Point' @ $real
          @ ^ [V_p: '3d.Point'] :
              ( '3d.distance^2/2' @ V_p @ V_q )
          @ V_ps ) ) ) )).

thf('3d.def_vec_same_direction_axiom',axiom,(
    ! [V_v: '3d.Vector',V_w: '3d.Vector'] :
      ( ( '3d.vec-same-direction/2' @ V_v @ V_w )
    <=> ( ( '3d.vec-parallel/2' @ V_v @ V_w )
        & ( $less @ 0.0 @ ( '3d.inner-prod/2' @ V_v @ V_w ) ) ) ) )).

thf('3d.def_vec_opp_direction_axiom',axiom,(
    ! [V_v: '3d.Vector',V_w: '3d.Vector'] :
      ( ( '3d.vec-opp-direction/2' @ V_v @ V_w )
    <=> ( ( '3d.vec-parallel/2' @ V_v @ V_w )
        & ( $greater @ 0.0 @ ( '3d.inner-prod/2' @ V_v @ V_w ) ) ) ) )).

thf('3d.def-is-vector_axiom',axiom,(
    ! [V_v: '3d.Vector'] :
      ( '3d.is-vector/1' @ V_v ) )).

thf('3d.def_is_unit_vec_axiom',axiom,(
    ! [V_v: '3d.Vector'] :
      ( ( '3d.is-unit-vec/1' @ V_v )
    <=> ( 1.0
        = ( '3d.radius^2/1' @ V_v ) ) ) )).

thf('3d.def-vec-unary-minus_axiom',axiom,(
    ! [V_v: '3d.Vector'] :
      ( ( '3d.v-/1' @ V_v )
      = ( '3d.sv*/2' @ -1.0 @ V_v ) ) )).

thf('3d.def_is_normal_vector_of_axiom',axiom,(
    ! [V_q: '3d.Point',V_p: '3d.Point',V_v: '3d.Vector'] :
      ( ( '3d.line-type/1' @ ( '3d.line/2' @ V_p @ V_q ) )
     => ( ( '3d.is-normal-vector-of/2' @ V_v @ ( '3d.line/2' @ V_p @ V_q ) )
      <=> ( 0.0
          = ( '3d.inner-prod/2' @ V_v @ ( '3d.vec/2' @ V_p @ V_q ) ) ) ) ) )).

thf('3d.def_normal_vector_to_line_axiom',axiom,(
    ! [V_point: '3d.Point',V_Q: '3d.Point',V_P: '3d.Point'] :
      ( ( '3d.line-type/1' @ ( '3d.line/2' @ V_P @ V_Q ) )
     => ( ( '3d.normal-vector-to/2' @ ( '3d.line/2' @ V_P @ V_Q ) @ V_point )
        = ( '3d.v-/2' @ ( '3d.vec/2' @ V_P @ V_point ) @ ( '3d.sv*/2' @ ( $quotient @ ( '3d.inner-prod/2' @ ( '3d.vec/2' @ V_P @ V_point ) @ ( '3d.vec/2' @ V_P @ V_Q ) ) @ ( '3d.radius^2/1' @ ( '3d.vec/2' @ V_P @ V_Q ) ) ) @ ( '3d.vec/2' @ V_P @ V_Q ) ) ) ) ) )).

thf('3d.def_direction_vec_axiom',axiom,(
    ! [V_q: '3d.Point',V_p: '3d.Point'] :
      ( ( '3d.line-type/1' @ ( '3d.line/2' @ V_p @ V_q ) )
     => ( ( '3d.direction-vec/1' @ ( '3d.line/2' @ V_p @ V_q ) )
        = ( '3d.vec/2' @ V_p @ V_q ) ) ) )).

thf('3d.def_radius_vector_axiom',axiom,(
    ! [V_v: '3d.Vector'] :
      ( ( '3d.radius/1' @ V_v )
      = ( 'sqrt/1' @ ( '3d.inner-prod/2' @ V_v @ V_v ) ) ) )).

thf('3d.def_square_radius_vector_axiom',axiom,(
    ! [V_v: '3d.Vector'] :
      ( ( '3d.radius^2/1' @ V_v )
      = ( '3d.inner-prod/2' @ V_v @ V_v ) ) )).

thf('3d.def_normalize_axiom',axiom,(
    ! [V_v: '3d.Vector'] :
      ( ( '3d.normalize/1' @ V_v )
      = ( '3d.sv*/2' @ ( $quotient @ 1.0 @ ( '3d.radius/1' @ V_v ) ) @ V_v ) ) )).

thf('3d.def-v-sum-nil_axiom',axiom,
    ( ( '3d.v-sum/1' @ ( 'nil/0' @ '3d.Vector' ) )
    = '3d.zero-vector/0' )).

thf('3d.def-v-sum-cons_axiom',axiom,(
    ! [V_v: '3d.Vector',V_vs: ( 'ListOf' @ '3d.Vector' )] :
      ( ( '3d.v-sum/1' @ ( 'cons/2' @ '3d.Vector' @ V_v @ V_vs ) )
      = ( '3d.v+/2' @ V_v @ ( '3d.v-sum/1' @ V_vs ) ) ) )).

thf('3d.def_cos_of_angle_axiom',axiom,(
    ! [V_c: '3d.Point',V_b: '3d.Point',V_a: '3d.Point'] :
      ( ( '3d.angle-type/1' @ ( '3d.angle/3' @ V_a @ V_b @ V_c ) )
     => ( ( '3d.cos-of-angle/1' @ ( '3d.angle/3' @ V_a @ V_b @ V_c ) )
        = ( $quotient @ ( '3d.inner-prod/2' @ ( '3d.vec/2' @ V_b @ V_a ) @ ( '3d.vec/2' @ V_b @ V_c ) ) @ ( $product @ ( '3d.distance/2' @ V_b @ V_a ) @ ( '3d.distance/2' @ V_b @ V_c ) ) ) ) ) )).

thf('3d.def_sin_of_angle_axiom',axiom,(
    ! [V_a: '3d.Angle'] :
      ( ( '3d.sin-of-angle/1' @ V_a )
      = ( 'sqrt/1' @ ( $difference @ 1.0 @ ( '^/2' @ ( '3d.cos-of-angle/1' @ V_a ) @ 2.0 ) ) ) ) )).

thf('3d.def_tan_of_angle_axiom',axiom,(
    ! [V_c: '3d.Point',V_b: '3d.Point',V_a: '3d.Point'] :
      ( ( '3d.angle-type/1' @ ( '3d.angle/3' @ V_a @ V_b @ V_c ) )
     => ( ( '3d.tan-of-angle/1' @ ( '3d.angle/3' @ V_a @ V_b @ V_c ) )
        = ( $quotient @ ( 'abs/1' @ ( $sum @ ( $difference @ ( $product @ ( '3d.x-coord/1' @ V_a ) @ ( '3d.y-coord/1' @ V_b ) ) @ ( $product @ ( '3d.y-coord/1' @ V_a ) @ ( '3d.x-coord/1' @ V_b ) ) ) @ ( $sum @ ( $difference @ ( $product @ ( '3d.x-coord/1' @ V_b ) @ ( '3d.y-coord/1' @ V_c ) ) @ ( $product @ ( '3d.y-coord/1' @ V_b ) @ ( '3d.x-coord/1' @ V_c ) ) ) @ ( $difference @ ( $product @ ( '3d.x-coord/1' @ V_c ) @ ( '3d.y-coord/1' @ V_a ) ) @ ( $product @ ( '3d.y-coord/1' @ V_c ) @ ( '3d.x-coord/1' @ V_a ) ) ) ) ) ) @ ( '3d.inner-prod/2' @ ( '3d.vec/2' @ V_b @ V_a ) @ ( '3d.vec/2' @ V_b @ V_c ) ) ) ) ) )).

thf('3d.def_cos_of_angle_lines_axiom',axiom,(
    ! [V_q: '3d.Point',V_p: '3d.Point',V_b: '3d.Point',V_a: '3d.Point'] :
      ( ( ( '3d.line-type/1' @ ( '3d.line/2' @ V_a @ V_b ) )
        & ( '3d.line-type/1' @ ( '3d.line/2' @ V_p @ V_q ) ) )
     => ( ( '3d.cos-of-angle/1' @ ( '3d.formed-angle-of/2' @ ( '3d.line/2' @ V_a @ V_b ) @ ( '3d.line/2' @ V_p @ V_q ) ) )
        = ( 'max/2' @ ( '3d.cos-of-angle/1' @ ( '3d.angle-of-vectors/2' @ ( '3d.vec/2' @ V_a @ V_b ) @ ( '3d.vec/2' @ V_p @ V_q ) ) ) @ ( '3d.cos-of-angle/1' @ ( '3d.angle-of-vectors/2' @ ( '3d.vec/2' @ V_b @ V_a ) @ ( '3d.vec/2' @ V_p @ V_q ) ) ) ) ) ) )).

thf('3d.def_cos_of_angle_half_lines_axiom',axiom,(
    ! [V_q: '3d.Point',V_p: '3d.Point',V_b: '3d.Point',V_a: '3d.Point'] :
      ( ( ( '3d.half-line-type/1' @ ( '3d.half-line/2' @ V_a @ V_b ) )
        & ( '3d.half-line-type/1' @ ( '3d.half-line/2' @ V_p @ V_q ) ) )
     => ( ( '3d.cos-of-angle/1' @ ( '3d.formed-angle-of/2' @ ( '3d.half-line/2' @ V_a @ V_b ) @ ( '3d.half-line/2' @ V_p @ V_q ) ) )
        = ( '3d.cos-of-angle/1' @ ( '3d.angle-of-vectors/2' @ ( '3d.vec/2' @ V_a @ V_b ) @ ( '3d.vec/2' @ V_p @ V_q ) ) ) ) ) )).

thf('3d.def_cos_1/2_angle_axiom',axiom,(
    ! [V_A: '3d.Angle'] :
      ( ( 'cos/1' @ ( $product @ ( $quotient @ 1.0 @ 2.0 ) @ ( '3d.rad-of-angle/1' @ V_A ) ) )
      = ( 'sqrt/1' @ ( $quotient @ ( $sum @ 1.0 @ ( '3d.cos-of-angle/1' @ V_A ) ) @ 2.0 ) ) ) )).

thf('3d.def_cos_1/2_angle2_axiom',axiom,(
    ! [V_A: '3d.Angle'] :
      ( ( 'cos/1' @ ( $product @ ( $quotient @ ( $to_real @ 1 ) @ ( $to_real @ 2 ) ) @ ( '3d.rad-of-angle/1' @ V_A ) ) )
      = ( 'sqrt/1' @ ( $quotient @ ( $sum @ 1.0 @ ( '3d.cos-of-angle/1' @ V_A ) ) @ 2.0 ) ) ) )).

thf('3d.def_sin_1/2_angle_axiom',axiom,(
    ! [V_A: '3d.Angle'] :
      ( ( 'sin/1' @ ( $product @ ( $quotient @ 1.0 @ 2.0 ) @ ( '3d.rad-of-angle/1' @ V_A ) ) )
      = ( 'sqrt/1' @ ( $quotient @ ( $difference @ 1.0 @ ( '3d.cos-of-angle/1' @ V_A ) ) @ 2.0 ) ) ) )).

thf('3d.def_sin_1/2_angle2_axiom',axiom,(
    ! [V_A: '3d.Angle'] :
      ( ( 'sin/1' @ ( $product @ ( $quotient @ ( $to_real @ 1 ) @ ( $to_real @ 2 ) ) @ ( '3d.rad-of-angle/1' @ V_A ) ) )
      = ( 'sqrt/1' @ ( $quotient @ ( $difference @ 1.0 @ ( '3d.cos-of-angle/1' @ V_A ) ) @ 2.0 ) ) ) )).

thf('3d.def_tan_1/2_angle_axiom',axiom,(
    ! [V_A: '3d.Angle'] :
      ( ( 'tan/1' @ ( $product @ ( $quotient @ 1.0 @ 2.0 ) @ ( '3d.rad-of-angle/1' @ V_A ) ) )
      = ( 'sqrt/1' @ ( $quotient @ ( $difference @ 1.0 @ ( '3d.cos-of-angle/1' @ V_A ) ) @ ( $sum @ 1.0 @ ( '3d.cos-of-angle/1' @ V_A ) ) ) ) ) )).

thf('3d.def_tan_1/2_angle2_axiom',axiom,(
    ! [V_A: '3d.Angle'] :
      ( ( 'tan/1' @ ( $product @ ( $quotient @ ( $to_real @ 1 ) @ ( $to_real @ 2 ) ) @ ( '3d.rad-of-angle/1' @ V_A ) ) )
      = ( 'sqrt/1' @ ( $quotient @ ( $difference @ 1.0 @ ( '3d.cos-of-angle/1' @ V_A ) ) @ ( $sum @ 1.0 @ ( '3d.cos-of-angle/1' @ V_A ) ) ) ) ) )).

thf('3d.def_cos_2*angle_axiom',axiom,(
    ! [V_A: '3d.Angle'] :
      ( ( 'cos/1' @ ( $product @ 2.0 @ ( '3d.rad-of-angle/1' @ V_A ) ) )
      = ( $difference @ ( '^/2' @ ( 'cos/1' @ ( '3d.rad-of-angle/1' @ V_A ) ) @ 2.0 ) @ ( '^/2' @ ( 'sin/1' @ ( '3d.rad-of-angle/1' @ V_A ) ) @ 2.0 ) ) ) )).

thf('3d.def_cos_2*angle2_axiom',axiom,(
    ! [V_A: '3d.Angle'] :
      ( ( 'cos/1' @ ( $product @ ( $to_real @ 2 ) @ ( '3d.rad-of-angle/1' @ V_A ) ) )
      = ( $difference @ ( '^/2' @ ( 'cos/1' @ ( '3d.rad-of-angle/1' @ V_A ) ) @ 2.0 ) @ ( '^/2' @ ( 'sin/1' @ ( '3d.rad-of-angle/1' @ V_A ) ) @ 2.0 ) ) ) )).

thf('3d.def_sin_2*angle_axiom',axiom,(
    ! [V_A: '3d.Angle'] :
      ( ( 'sin/1' @ ( $product @ 2.0 @ ( '3d.rad-of-angle/1' @ V_A ) ) )
      = ( $product @ 2.0 @ ( $product @ ( 'cos/1' @ ( '3d.rad-of-angle/1' @ V_A ) ) @ ( 'sin/1' @ ( '3d.rad-of-angle/1' @ V_A ) ) ) ) ) )).

thf('3d.def_sin_2*angle2_axiom',axiom,(
    ! [V_A: '3d.Angle'] :
      ( ( 'sin/1' @ ( $product @ ( $to_real @ 2 ) @ ( '3d.rad-of-angle/1' @ V_A ) ) )
      = ( $product @ 2.0 @ ( $product @ ( 'cos/1' @ ( '3d.rad-of-angle/1' @ V_A ) ) @ ( 'sin/1' @ ( '3d.rad-of-angle/1' @ V_A ) ) ) ) ) )).

thf('3d.def_tan_2*angle_axiom',axiom,(
    ! [V_A: '3d.Angle'] :
      ( ( 'tan/1' @ ( $product @ 2.0 @ ( '3d.rad-of-angle/1' @ V_A ) ) )
      = ( $quotient @ ( 'sin/1' @ ( $product @ 2.0 @ ( '3d.rad-of-angle/1' @ V_A ) ) ) @ ( 'cos/1' @ ( $product @ 2.0 @ ( '3d.rad-of-angle/1' @ V_A ) ) ) ) ) )).

thf('3d.def_tan_2*angle2_axiom',axiom,(
    ! [V_A: '3d.Angle'] :
      ( ( 'tan/1' @ ( $product @ ( $to_real @ 2 ) @ ( '3d.rad-of-angle/1' @ V_A ) ) )
      = ( $quotient @ ( 'sin/1' @ ( $product @ 2.0 @ ( '3d.rad-of-angle/1' @ V_A ) ) ) @ ( 'cos/1' @ ( $product @ 2.0 @ ( '3d.rad-of-angle/1' @ V_A ) ) ) ) ) )).

thf('3d.def_cos_addition_theorem_angle_additon_axiom',axiom,(
    ! [V_A: '3d.Angle',V_B: '3d.Angle'] :
      ( ( 'cos/1' @ ( $sum @ ( '3d.rad-of-angle/1' @ V_A ) @ ( '3d.rad-of-angle/1' @ V_B ) ) )
      = ( $difference @ ( $product @ ( 'cos/1' @ ( '3d.rad-of-angle/1' @ V_A ) ) @ ( 'cos/1' @ ( '3d.rad-of-angle/1' @ V_B ) ) ) @ ( $product @ ( 'sin/1' @ ( '3d.rad-of-angle/1' @ V_A ) ) @ ( 'sin/1' @ ( '3d.rad-of-angle/1' @ V_B ) ) ) ) ) )).

thf('3d.def_cos_addition_theorem_angle_substraction_axiom',axiom,(
    ! [V_A: '3d.Angle',V_B: '3d.Angle'] :
      ( ( 'cos/1' @ ( $difference @ ( '3d.rad-of-angle/1' @ V_A ) @ ( '3d.rad-of-angle/1' @ V_B ) ) )
      = ( $sum @ ( $product @ ( 'cos/1' @ ( '3d.rad-of-angle/1' @ V_A ) ) @ ( 'cos/1' @ ( '3d.rad-of-angle/1' @ V_B ) ) ) @ ( $product @ ( 'sin/1' @ ( '3d.rad-of-angle/1' @ V_A ) ) @ ( 'sin/1' @ ( '3d.rad-of-angle/1' @ V_B ) ) ) ) ) )).

thf('3d.def_sin_addition_theorem_angle_additon_axiom',axiom,(
    ! [V_A: '3d.Angle',V_B: '3d.Angle'] :
      ( ( 'sin/1' @ ( $sum @ ( '3d.rad-of-angle/1' @ V_A ) @ ( '3d.rad-of-angle/1' @ V_B ) ) )
      = ( $sum @ ( $product @ ( 'cos/1' @ ( '3d.rad-of-angle/1' @ V_A ) ) @ ( 'sin/1' @ ( '3d.rad-of-angle/1' @ V_B ) ) ) @ ( $product @ ( 'sin/1' @ ( '3d.rad-of-angle/1' @ V_A ) ) @ ( 'cos/1' @ ( '3d.rad-of-angle/1' @ V_B ) ) ) ) ) )).

thf('3d.def_sin_addition_theorem_angle_substraction_axiom',axiom,(
    ! [V_A: '3d.Angle',V_B: '3d.Angle'] :
      ( ( 'sin/1' @ ( $difference @ ( '3d.rad-of-angle/1' @ V_A ) @ ( '3d.rad-of-angle/1' @ V_B ) ) )
      = ( $difference @ ( $product @ ( 'sin/1' @ ( '3d.rad-of-angle/1' @ V_A ) ) @ ( 'cos/1' @ ( '3d.rad-of-angle/1' @ V_B ) ) ) @ ( $product @ ( 'cos/1' @ ( '3d.rad-of-angle/1' @ V_A ) ) @ ( 'sin/1' @ ( '3d.rad-of-angle/1' @ V_B ) ) ) ) ) )).

thf('3d.def_is_right_axiom',axiom,(
    ! [V_c: '3d.Point',V_b: '3d.Point',V_a: '3d.Point'] :
      ( ( '3d.angle-type/1' @ ( '3d.angle/3' @ V_a @ V_b @ V_c ) )
     => ( ( '3d.is-right/1' @ ( '3d.angle/3' @ V_a @ V_b @ V_c ) )
      <=> ( 0.0
          = ( '3d.inner-prod/2' @ ( '3d.vec/2' @ V_b @ V_a ) @ ( '3d.vec/2' @ V_b @ V_c ) ) ) ) ) )).

thf('3d.def_is_acute_axiom',axiom,(
    ! [V_c: '3d.Point',V_b: '3d.Point',V_a: '3d.Point'] :
      ( ( '3d.angle-type/1' @ ( '3d.angle/3' @ V_a @ V_b @ V_c ) )
     => ( ( '3d.is-acute/1' @ ( '3d.angle/3' @ V_a @ V_b @ V_c ) )
      <=> ( $less @ 0.0 @ ( '3d.cos-of-angle/1' @ ( '3d.angle/3' @ V_a @ V_b @ V_c ) ) ) ) ) )).

thf('3d.def_is_obtuse_axiom',axiom,(
    ! [V_c: '3d.Point',V_b: '3d.Point',V_a: '3d.Point'] :
      ( ( '3d.angle-type/1' @ ( '3d.angle/3' @ V_a @ V_b @ V_c ) )
     => ( ( '3d.is-obtuse/1' @ ( '3d.angle/3' @ V_a @ V_b @ V_c ) )
      <=> ( $greater @ 0.0 @ ( '3d.cos-of-angle/1' @ ( '3d.angle/3' @ V_a @ V_b @ V_c ) ) ) ) ) )).

thf('3d.def-is-angle_axiom',axiom,(
    ! [V_a: '3d.Angle'] :
      ( '3d.is-angle/1' @ V_a ) )).

thf('3d.def_same_angle_axiom',axiom,(
    ! [V_a: '3d.Angle',V_b: '3d.Angle'] :
      ( ( '3d.same-angle/2' @ V_a @ V_b )
    <=> ( ( '3d.cos-of-angle/1' @ V_a )
        = ( '3d.cos-of-angle/1' @ V_b ) ) ) )).

thf('3d.def_angle_equality_axiom',axiom,(
    ! [V_F: '3d.Point',V_E: '3d.Point',V_D: '3d.Point',V_C: '3d.Point',V_B: '3d.Point',V_A: '3d.Point'] :
      ( ( ( '3d.angle-type/1' @ ( '3d.angle/3' @ V_A @ V_B @ V_C ) )
        & ( '3d.angle-type/1' @ ( '3d.angle/3' @ V_D @ V_E @ V_F ) ) )
     => ( ( ( '3d.angle/3' @ V_A @ V_B @ V_C )
          = ( '3d.angle/3' @ V_D @ V_E @ V_F ) )
      <=> ( ( V_A = V_D )
          & ( V_B = V_E )
          & ( V_C = V_F ) ) ) ) )).

thf('3d.def_angle_of_vectors_axiom',axiom,(
    ! [V_v0: '3d.Vector',V_v1: '3d.Vector'] :
      ( ( '3d.angle-of-vectors/2' @ V_v0 @ V_v1 )
      = ( '3d.angle/3' @ ( '3d.vec->point/1' @ V_v1 ) @ '3d.origin/0' @ ( '3d.vec->point/1' @ V_v0 ) ) ) )).

thf('3d.def_lt_rad_of_angle_axiom',axiom,(
    ! [V_a: '3d.Angle',V_x: $real] :
      ( ( $less @ ( '3d.rad-of-angle/1' @ V_a ) @ V_x )
    <=> ( $greater @ ( '3d.cos-of-angle/1' @ V_a ) @ ( 'cos/1' @ V_x ) ) ) )).

thf('3d.def_lt_rad_of_angle_const_rad_axiom',axiom,(
    ! [V_a: '3d.Angle',V_x: $real] :
      ( ( $less @ V_x @ ( '3d.rad-of-angle/1' @ V_a ) )
    <=> ( $greater @ ( 'cos/1' @ V_x ) @ ( '3d.cos-of-angle/1' @ V_a ) ) ) )).

thf('3d.def_gt_rad_of_angle_axiom',axiom,(
    ! [V_a: '3d.Angle',V_x: $real] :
      ( ( $greater @ ( '3d.rad-of-angle/1' @ V_a ) @ V_x )
    <=> ( $less @ ( '3d.cos-of-angle/1' @ V_a ) @ ( 'cos/1' @ V_x ) ) ) )).

thf('3d.def_gt_rad_of_angle_const_rad_axiom',axiom,(
    ! [V_a: '3d.Angle',V_x: $real] :
      ( ( $greater @ V_x @ ( '3d.rad-of-angle/1' @ V_a ) )
    <=> ( $less @ ( 'cos/1' @ V_x ) @ ( '3d.cos-of-angle/1' @ V_a ) ) ) )).

thf('3d.def_le_rad_of_angle_axiom',axiom,(
    ! [V_a: '3d.Angle',V_x: $real] :
      ( ( $lesseq @ ( '3d.rad-of-angle/1' @ V_a ) @ V_x )
    <=> ( $greatereq @ ( '3d.cos-of-angle/1' @ V_a ) @ ( 'cos/1' @ V_x ) ) ) )).

thf('3d.def_le_rad_of_angle_const_rad_axiom',axiom,(
    ! [V_a: '3d.Angle',V_x: $real] :
      ( ( $lesseq @ V_x @ ( '3d.rad-of-angle/1' @ V_a ) )
    <=> ( $greatereq @ ( 'cos/1' @ V_x ) @ ( '3d.cos-of-angle/1' @ V_a ) ) ) )).

thf('3d.def_ge_rad_of_angle_axiom',axiom,(
    ! [V_a: '3d.Angle',V_x: $real] :
      ( ( $greatereq @ ( '3d.rad-of-angle/1' @ V_a ) @ V_x )
    <=> ( $lesseq @ ( '3d.cos-of-angle/1' @ V_a ) @ ( 'cos/1' @ V_x ) ) ) )).

thf('3d.def_ge_rad_of_angle_const_rad_axiom',axiom,(
    ! [V_a: '3d.Angle',V_x: $real] :
      ( ( $greatereq @ V_x @ ( '3d.rad-of-angle/1' @ V_a ) )
    <=> ( $lesseq @ ( 'cos/1' @ V_x ) @ ( '3d.cos-of-angle/1' @ V_a ) ) ) )).

thf('3d.def_eq_rad_of_angle_axiom',axiom,(
    ! [V_a: '3d.Angle',V_x: $real] :
      ( ( ( '3d.rad-of-angle/1' @ V_a )
        = V_x )
    <=> ( ( ( '3d.cos-of-angle/1' @ V_a )
          = ( 'cos/1' @ V_x ) )
        & ( $lesseq @ 0.0 @ ( '3d.rad-of-angle/1' @ V_a ) )
        & ( $lesseq @ ( '3d.rad-of-angle/1' @ V_a ) @ 'Pi/0' )
        & ( $lesseq @ 0.0 @ ( 'sin/1' @ V_x ) ) ) ) )).

thf('3d.def_cos_of_rad_of_angle_axiom',axiom,(
    ! [V_a: '3d.Angle'] :
      ( ( 'cos/1' @ ( '3d.rad-of-angle/1' @ V_a ) )
      = ( '3d.cos-of-angle/1' @ V_a ) ) )).

thf('3d.def_sin_of_rad_of_angle_axiom',axiom,(
    ! [V_a: '3d.Angle'] :
      ( ( 'sin/1' @ ( '3d.rad-of-angle/1' @ V_a ) )
      = ( '3d.sin-of-angle/1' @ V_a ) ) )).

thf('3d.def_tan_of_rad_of_angle_axiom',axiom,(
    ! [V_a: '3d.Angle'] :
      ( ( 'tan/1' @ ( '3d.rad-of-angle/1' @ V_a ) )
      = ( '3d.tan-of-angle/1' @ V_a ) ) )).

thf('3d.def_is_interior_angle_triangle_axiom',axiom,(
    ! [V_C: '3d.Point',V_B: '3d.Point',V_A: '3d.Point',V_a: '3d.Angle'] :
      ( ( '3d.triangle-type/1' @ ( '3d.triangle/3' @ V_A @ V_B @ V_C ) )
     => ( ( '3d.is-interior-angle/2' @ V_a @ ( '3d.triangle/3' @ V_A @ V_B @ V_C ) )
      <=> ( ( V_a
            = ( '3d.angle/3' @ V_A @ V_B @ V_C ) )
          | ( V_a
            = ( '3d.angle/3' @ V_C @ V_B @ V_A ) )
          | ( V_a
            = ( '3d.angle/3' @ V_B @ V_C @ V_A ) )
          | ( V_a
            = ( '3d.angle/3' @ V_A @ V_C @ V_B ) )
          | ( V_a
            = ( '3d.angle/3' @ V_C @ V_A @ V_B ) )
          | ( V_a
            = ( '3d.angle/3' @ V_B @ V_A @ V_C ) ) ) ) ) )).

thf('3d.def_is_interior_angle_square_axiom',axiom,(
    ! [V_D: '3d.Point',V_C: '3d.Point',V_B: '3d.Point',V_A: '3d.Point',V_a: '3d.Angle'] :
      ( ( '3d.square-type/1' @ ( '3d.square/4' @ V_A @ V_B @ V_C @ V_D ) )
     => ( ( '3d.is-interior-angle/2' @ V_a @ ( '3d.square/4' @ V_A @ V_B @ V_C @ V_D ) )
      <=> ( ( V_a
            = ( '3d.angle/3' @ V_A @ V_B @ V_C ) )
          | ( V_a
            = ( '3d.angle/3' @ V_C @ V_B @ V_A ) )
          | ( V_a
            = ( '3d.angle/3' @ V_B @ V_C @ V_A ) )
          | ( V_a
            = ( '3d.angle/3' @ V_A @ V_C @ V_B ) )
          | ( V_a
            = ( '3d.angle/3' @ V_C @ V_D @ V_A ) )
          | ( V_a
            = ( '3d.angle/3' @ V_A @ V_D @ V_C ) )
          | ( V_a
            = ( '3d.angle/3' @ V_D @ V_A @ V_B ) )
          | ( V_a
            = ( '3d.angle/3' @ V_B @ V_A @ V_D ) ) ) ) ) )).

thf('3d.def_is_angle_bisector_axiom',axiom,(
    ! [V_c: '3d.Point',V_b: '3d.Point',V_a: '3d.Point',V_Q: '3d.Point',V_P: '3d.Point'] :
      ( ( ( '3d.line-type/1' @ ( '3d.line/2' @ V_P @ V_Q ) )
        & ( '3d.angle-type/1' @ ( '3d.angle/3' @ V_a @ V_b @ V_c ) ) )
     => ( ( '3d.is-angle-bisector/2' @ ( '3d.line/2' @ V_P @ V_Q ) @ ( '3d.angle/3' @ V_a @ V_b @ V_c ) )
      <=> ( ( ( '3d.colinear/3' @ V_a @ V_b @ V_c )
            & ( ( ( $less @ 0.0 @ ( '3d.inner-prod/2' @ ( '3d.vec/2' @ V_b @ V_a ) @ ( '3d.vec/2' @ V_b @ V_c ) ) )
                & ( ( '3d.line/2' @ V_P @ V_Q )
                  = ( '3d.line/2' @ V_a @ V_b ) ) )
              | ( ( $greatereq @ 0.0 @ ( '3d.inner-prod/2' @ ( '3d.vec/2' @ V_b @ V_a ) @ ( '3d.vec/2' @ V_b @ V_c ) ) )
                & ( '3d.on/2' @ V_b @ ( '3d.line/2' @ V_P @ V_Q ) )
                & ( '3d.perpendicular/2' @ ( '3d.line/2' @ V_P @ V_Q ) @ ( '3d.line/2' @ V_a @ V_c ) ) ) ) )
          | ( ~ ( '3d.colinear/3' @ V_a @ V_b @ V_c )
            & ( ( '3d.line/2' @ V_P @ V_Q )
              = ( '3d.line/2' @ V_b @ ( '3d.internally-dividing-point/3' @ V_a @ V_c @ ( $quotient @ ( '3d.distance/2' @ V_b @ V_a ) @ ( $sum @ ( '3d.distance/2' @ V_b @ V_a ) @ ( '3d.distance/2' @ V_b @ V_c ) ) ) ) ) ) ) ) ) ) )).

thf('3d.def_is_angle_bisector_seg_axiom',axiom,(
    ! [V_A: '3d.Angle',V_Q: '3d.Point',V_P: '3d.Point'] :
      ( ( '3d.segment-type/1' @ ( '3d.seg/2' @ V_P @ V_Q ) )
     => ( ( '3d.is-angle-bisector/2' @ ( '3d.seg/2' @ V_P @ V_Q ) @ V_A )
      <=> ( '3d.is-angle-bisector/2' @ ( '3d.line/2' @ V_P @ V_Q ) @ V_A ) ) ) )).

thf('3d.def-exterior-angle-of_axiom',axiom,(
    ! [V_C: '3d.Point',V_B: '3d.Point',V_A: '3d.Point'] :
      ( ( '3d.angle-type/1' @ ( '3d.angle/3' @ V_A @ V_B @ V_C ) )
     => ( ( '3d.exterior-angle-of/1' @ ( '3d.angle/3' @ V_A @ V_B @ V_C ) )
        = ( '3d.angle/3' @ V_A @ V_B @ ( '3d.vec-translate/2' @ V_B @ ( '3d.vec/2' @ V_C @ V_B ) ) ) ) ) )).

thf('3d.def_is_end_point_of_axiom',axiom,(
    ! [V_q1: '3d.Point',V_q0: '3d.Point',V_p: '3d.Point'] :
      ( ( '3d.segment-type/1' @ ( '3d.seg/2' @ V_q0 @ V_q1 ) )
     => ( ( '3d.is-end-point-of/2' @ V_p @ ( '3d.seg/2' @ V_q0 @ V_q1 ) )
      <=> ( ( V_p = V_q0 )
          | ( V_p = V_q1 ) ) ) ) )).

thf('3d.def_is_end_point_of_half_line_axiom',axiom,(
    ! [V_Q: '3d.Point',V_P: '3d.Point',V_p: '3d.Point'] :
      ( ( '3d.half-line-type/1' @ ( '3d.half-line/2' @ V_P @ V_Q ) )
     => ( ( '3d.is-end-point-of/2' @ V_p @ ( '3d.half-line/2' @ V_P @ V_Q ) )
      <=> ( V_p = V_P ) ) ) )).

thf('3d.def_vertices_of_seg_axiom',axiom,(
    ! [V_p1: '3d.Point',V_p0: '3d.Point'] :
      ( ( '3d.segment-type/1' @ ( '3d.seg/2' @ V_p0 @ V_p1 ) )
     => ( ( '3d.vertices-of/1' @ ( '3d.seg/2' @ V_p0 @ V_p1 ) )
        = ( 'cons/2' @ '3d.Point' @ V_p0 @ ( 'cons/2' @ '3d.Point' @ V_p1 @ ( 'nil/0' @ '3d.Point' ) ) ) ) ) )).

thf('3d.def_vertices_of_half_line_axiom',axiom,(
    ! [V_p1: '3d.Point',V_p0: '3d.Point'] :
      ( ( '3d.half-line-type/1' @ ( '3d.half-line/2' @ V_p0 @ V_p1 ) )
     => ( ( '3d.vertices-of/1' @ ( '3d.half-line/2' @ V_p0 @ V_p1 ) )
        = ( 'cons/2' @ '3d.Point' @ V_p0 @ ( 'nil/0' @ '3d.Point' ) ) ) ) )).

thf('3d.def_vertices_of_triangle_axiom',axiom,(
    ! [V_p2: '3d.Point',V_p1: '3d.Point',V_p0: '3d.Point'] :
      ( ( '3d.triangle-type/1' @ ( '3d.triangle/3' @ V_p0 @ V_p1 @ V_p2 ) )
     => ( ( '3d.vertices-of/1' @ ( '3d.triangle/3' @ V_p0 @ V_p1 @ V_p2 ) )
        = ( 'cons/2' @ '3d.Point' @ V_p0 @ ( 'cons/2' @ '3d.Point' @ V_p1 @ ( 'cons/2' @ '3d.Point' @ V_p2 @ ( 'nil/0' @ '3d.Point' ) ) ) ) ) ) )).

thf('3d.def_vertices_of_square_axiom',axiom,(
    ! [V_p3: '3d.Point',V_p2: '3d.Point',V_p1: '3d.Point',V_p0: '3d.Point'] :
      ( ( '3d.square-type/1' @ ( '3d.square/4' @ V_p0 @ V_p1 @ V_p2 @ V_p3 ) )
     => ( ( '3d.vertices-of/1' @ ( '3d.square/4' @ V_p0 @ V_p1 @ V_p2 @ V_p3 ) )
        = ( 'cons/2' @ '3d.Point' @ V_p0 @ ( 'cons/2' @ '3d.Point' @ V_p1 @ ( 'cons/2' @ '3d.Point' @ V_p2 @ ( 'cons/2' @ '3d.Point' @ V_p3 @ ( 'nil/0' @ '3d.Point' ) ) ) ) ) ) ) )).

thf('3d.def_vertices_of_polygon_axiom',axiom,(
    ! [V_points: ( 'ListOf' @ '3d.Point' )] :
      ( ( '3d.polygon-type/1' @ ( '3d.polygon/1' @ V_points ) )
     => ( ( '3d.vertices-of/1' @ ( '3d.polygon/1' @ V_points ) )
        = V_points ) ) )).

thf('3d.def_lines_intersect_at_base_case_axiom',axiom,(
    ! [V_p: '3d.Point'] :
      ( ( '3d.lines-intersect-at/2' @ ( 'nil/0' @ '3d.Shape' ) @ V_p )
    <=> $true ) )).

thf('3d.def_lines_intersect_at_axiom',axiom,(
    ! [V_l: '3d.Shape',V_ls: ( 'ListOf' @ '3d.Shape' ),V_p: '3d.Point'] :
      ( ( '3d.lines-intersect-at/2' @ ( 'cons/2' @ '3d.Shape' @ V_l @ V_ls ) @ V_p )
    <=> ( ( '3d.on/2' @ V_p @ V_l )
        & ( '3d.lines-intersect-at/2' @ V_ls @ V_p ) ) ) )).

thf('3d.def_lines_intersect_at_one_axiom',axiom,(
    ! [V_ls: ( 'ListOf' @ '3d.Shape' )] :
      ( ( '3d.lines-intersect-at-one/1' @ V_ls )
    <=> ? [V_p: '3d.Point'] :
          ( '3d.lines-intersect-at/2' @ V_ls @ V_p ) ) )).

thf('3d.def_seg_midpoint_of_axiom',axiom,(
    ! [V_q: '3d.Point',V_p: '3d.Point'] :
      ( ( '3d.segment-type/1' @ ( '3d.seg/2' @ V_p @ V_q ) )
     => ( ( '3d.seg-midpoint-of/1' @ ( '3d.seg/2' @ V_p @ V_q ) )
        = ( '3d.midpoint-of/2' @ V_p @ V_q ) ) ) )).

thf('3d.def-end-points-of-seg_axiom',axiom,(
    ! [V_q: '3d.Point',V_p: '3d.Point'] :
      ( ( '3d.segment-type/1' @ ( '3d.seg/2' @ V_p @ V_q ) )
     => ( ( '3d.end-points-of/1' @ ( '3d.seg/2' @ V_p @ V_q ) )
        = ( 'cons/2' @ '3d.Point' @ V_p @ ( 'cons/2' @ '3d.Point' @ V_q @ ( 'nil/0' @ '3d.Point' ) ) ) ) ) )).

thf('3d.def-end-points-of-arc_axiom',axiom,(
    ! [V_c: '3d.Point',V_p: '3d.Point',V_q: '3d.Point'] :
      ( ( '3d.end-points-of/1' @ ( '3d.arc/3' @ V_c @ V_p @ V_q ) )
      = ( 'cons/2' @ '3d.Point' @ V_p @ ( 'cons/2' @ '3d.Point' @ V_q @ ( 'nil/0' @ '3d.Point' ) ) ) ) )).

thf('3d.def_seg_extension_of_line_axiom',axiom,(
    ! [V_q: '3d.Point',V_p: '3d.Point'] :
      ( ( '3d.segment-type/1' @ ( '3d.seg/2' @ V_p @ V_q ) )
     => ( ( '3d.seg-extention-of/1' @ ( '3d.seg/2' @ V_p @ V_q ) )
        = ( '3d.line/2' @ V_p @ V_q ) ) ) )).

thf('3d.def_seg_extension_of_axiom',axiom,(
    ! [V_q: '3d.Point',V_p: '3d.Point'] :
      ( ( '3d.line-type/1' @ ( '3d.line/2' @ V_p @ V_q ) )
     => ( ( '3d.seg-extention-of/1' @ ( '3d.line/2' @ V_p @ V_q ) )
        = ( '3d.line/2' @ V_p @ V_q ) ) ) )).

thf('3d.def_half_line_extension_of_axiom',axiom,(
    ! [V_q: '3d.Point',V_p: '3d.Point'] :
      ( ( '3d.half-line-type/1' @ ( '3d.half-line/2' @ V_p @ V_q ) )
     => ( ( '3d.half-line-extension-of/1' @ ( '3d.half-line/2' @ V_p @ V_q ) )
        = ( '3d.line/2' @ V_p @ V_q ) ) ) )).

thf('3d.def_divide_internally_axiom',axiom,(
    ! [V_w: $real,V_v: $real,V_b: '3d.Point',V_a: '3d.Point',V_p: '3d.Point'] :
      ( ( '3d.segment-type/1' @ ( '3d.seg/2' @ V_a @ V_b ) )
     => ( ( '3d.divide-internally/4' @ V_p @ ( '3d.seg/2' @ V_a @ V_b ) @ V_v @ V_w )
      <=> ( V_p
          = ( '3d.vec->point/1' @ ( '3d.v+/2' @ ( '3d.sv*/2' @ ( $quotient @ V_w @ ( $sum @ V_v @ V_w ) ) @ ( '3d.vec/2' @ '3d.origin/0' @ V_a ) ) @ ( '3d.sv*/2' @ ( $quotient @ V_v @ ( $sum @ V_v @ V_w ) ) @ ( '3d.vec/2' @ '3d.origin/0' @ V_b ) ) ) ) ) ) ) )).

thf('3d.def_divide_externally_axiom',axiom,(
    ! [V_w: $real,V_v: $real,V_b: '3d.Point',V_a: '3d.Point',V_p: '3d.Point'] :
      ( ( '3d.segment-type/1' @ ( '3d.seg/2' @ V_a @ V_b ) )
     => ( ( '3d.divide-externally/4' @ V_p @ ( '3d.seg/2' @ V_a @ V_b ) @ V_v @ V_w )
      <=> ( V_p
          = ( '3d.vec->point/1' @ ( '3d.v+/2' @ ( '3d.sv*/2' @ ( $quotient @ ( $uminus @ V_w ) @ ( $difference @ V_v @ V_w ) ) @ ( '3d.vec/2' @ '3d.origin/0' @ V_a ) ) @ ( '3d.sv*/2' @ ( $quotient @ V_v @ ( $difference @ V_v @ V_w ) ) @ ( '3d.vec/2' @ '3d.origin/0' @ V_b ) ) ) ) ) ) ) )).

thf('3d.def_is_perp_bisector_axiom',axiom,(
    ! [V_l: '3d.Shape',V_m: '3d.Shape'] :
      ( ( '3d.is-perp-bisector/2' @ V_l @ V_m )
    <=> ( ( '3d.perpendicular/2' @ V_l @ ( '3d.seg-extention-of/1' @ V_m ) )
        & ( '3d.on/2' @ ( '3d.seg-midpoint-of/1' @ V_m ) @ V_l ) ) ) )).

thf('3d.def_triangle_equality_axiom',axiom,(
    ! [V_f: '3d.Point',V_e: '3d.Point',V_d: '3d.Point',V_c: '3d.Point',V_b: '3d.Point',V_a: '3d.Point'] :
      ( ( ( '3d.triangle-type/1' @ ( '3d.triangle/3' @ V_a @ V_b @ V_c ) )
        & ( '3d.triangle-type/1' @ ( '3d.triangle/3' @ V_d @ V_e @ V_f ) ) )
     => ( ( ( '3d.triangle/3' @ V_a @ V_b @ V_c )
          = ( '3d.triangle/3' @ V_d @ V_e @ V_f ) )
      <=> ( ( V_a = V_d )
          & ( V_b = V_e )
          & ( V_c = V_f ) ) ) ) )).

thf('3d.def_triangle_opposite_axiom',axiom,(
    ! [V_l: '3d.Shape',V_p: '3d.Point',V_c: '3d.Point',V_b: '3d.Point',V_a: '3d.Point'] :
      ( ( '3d.triangle-type/1' @ ( '3d.triangle/3' @ V_a @ V_b @ V_c ) )
     => ( ( '3d.triangle-opposite/3' @ ( '3d.triangle/3' @ V_a @ V_b @ V_c ) @ V_p @ V_l )
      <=> ( ( ( V_p = V_a )
            & ( V_l
              = ( '3d.seg/2' @ V_b @ V_c ) ) )
          | ( ( V_p = V_b )
            & ( V_l
              = ( '3d.seg/2' @ V_c @ V_a ) ) )
          | ( ( V_p = V_c )
            & ( V_l
              = ( '3d.seg/2' @ V_a @ V_b ) ) ) ) ) ) )).

thf('3d.def_triangle_opposite_angle_axiom',axiom,(
    ! [V_l: '3d.Shape',V_A: '3d.Angle',V_c: '3d.Point',V_b: '3d.Point',V_a: '3d.Point'] :
      ( ( '3d.triangle-type/1' @ ( '3d.triangle/3' @ V_a @ V_b @ V_c ) )
     => ( ( '3d.triangle-opposite-angle/3' @ ( '3d.triangle/3' @ V_a @ V_b @ V_c ) @ V_A @ V_l )
      <=> ( ( ( V_A
              = ( '3d.angle/3' @ V_c @ V_a @ V_b ) )
            & ( V_l
              = ( '3d.seg/2' @ V_b @ V_c ) ) )
          | ( ( V_A
              = ( '3d.angle/3' @ V_a @ V_b @ V_c ) )
            & ( V_l
              = ( '3d.seg/2' @ V_c @ V_a ) ) )
          | ( ( V_A
              = ( '3d.angle/3' @ V_b @ V_c @ V_a ) )
            & ( V_l
              = ( '3d.seg/2' @ V_a @ V_b ) ) ) ) ) ) )).

thf('3d.def_is_right_triangle_axiom',axiom,(
    ! [V_a: '3d.Point',V_b: '3d.Point',V_c: '3d.Point'] :
      ( ( '3d.is-right-triangle/3' @ V_a @ V_b @ V_c )
    <=> ( ( '3d.is-triangle/3' @ V_a @ V_b @ V_c )
        & ( ( '3d.is-right/1' @ ( '3d.angle/3' @ V_c @ V_a @ V_b ) )
          | ( '3d.is-right/1' @ ( '3d.angle/3' @ V_a @ V_b @ V_c ) )
          | ( '3d.is-right/1' @ ( '3d.angle/3' @ V_b @ V_c @ V_a ) ) ) ) ) )).

thf('3d.def-is-righ-triangle-shape_axiom',axiom,(
    ! [V_c: '3d.Point',V_b: '3d.Point',V_a: '3d.Point'] :
      ( ( '3d.triangle-type/1' @ ( '3d.triangle/3' @ V_a @ V_b @ V_c ) )
     => ( ( '3d.is-right-triangle/1' @ ( '3d.triangle/3' @ V_a @ V_b @ V_c ) )
      <=> ( '3d.is-right-triangle/3' @ V_a @ V_b @ V_c ) ) ) )).

thf('3d.def_is_acute_triangle_axiom',axiom,(
    ! [V_a: '3d.Point',V_b: '3d.Point',V_c: '3d.Point'] :
      ( ( '3d.is-acute-triangle/3' @ V_a @ V_b @ V_c )
    <=> ( ( '3d.is-triangle/3' @ V_a @ V_b @ V_c )
        & ( '3d.is-acute/1' @ ( '3d.angle/3' @ V_c @ V_a @ V_b ) )
        & ( '3d.is-acute/1' @ ( '3d.angle/3' @ V_a @ V_b @ V_c ) )
        & ( '3d.is-acute/1' @ ( '3d.angle/3' @ V_b @ V_c @ V_a ) ) ) ) )).

thf('3d.def_is_acute_triangle_shape_axiom',axiom,(
    ! [V_c: '3d.Point',V_b: '3d.Point',V_a: '3d.Point'] :
      ( ( '3d.triangle-type/1' @ ( '3d.triangle/3' @ V_a @ V_b @ V_c ) )
     => ( ( '3d.is-acute-triangle/1' @ ( '3d.triangle/3' @ V_a @ V_b @ V_c ) )
      <=> ( '3d.is-acute-triangle/3' @ V_a @ V_b @ V_c ) ) ) )).

thf('3d.def_is_obtuse_triangle_axiom',axiom,(
    ! [V_a: '3d.Point',V_b: '3d.Point',V_c: '3d.Point'] :
      ( ( '3d.is-obtuse-triangle/3' @ V_a @ V_b @ V_c )
    <=> ( ( '3d.is-triangle/3' @ V_a @ V_b @ V_c )
        & ( ( '3d.is-obtuse/1' @ ( '3d.angle/3' @ V_c @ V_a @ V_b ) )
          | ( '3d.is-obtuse/1' @ ( '3d.angle/3' @ V_a @ V_b @ V_c ) )
          | ( '3d.is-obtuse/1' @ ( '3d.angle/3' @ V_b @ V_c @ V_a ) ) ) ) ) )).

thf('3d.def_is_obtuse_triangle_shape_axiom',axiom,(
    ! [V_c: '3d.Point',V_b: '3d.Point',V_a: '3d.Point'] :
      ( ( '3d.triangle-type/1' @ ( '3d.triangle/3' @ V_a @ V_b @ V_c ) )
     => ( ( '3d.is-obtuse-triangle/1' @ ( '3d.triangle/3' @ V_a @ V_b @ V_c ) )
      <=> ( '3d.is-obtuse-triangle/3' @ V_a @ V_b @ V_c ) ) ) )).

thf('3d.def_is_equilateral_triangle_axiom',axiom,(
    ! [V_a: '3d.Point',V_b: '3d.Point',V_c: '3d.Point'] :
      ( ( '3d.is-equilateral-triangle/3' @ V_a @ V_b @ V_c )
    <=> ( ( '3d.is-triangle/3' @ V_a @ V_b @ V_c )
        & ( ( '3d.distance/2' @ V_a @ V_b )
          = ( '3d.distance/2' @ V_b @ V_c ) )
        & ( ( '3d.distance/2' @ V_b @ V_c )
          = ( '3d.distance/2' @ V_c @ V_a ) ) ) ) )).

thf('3d.def_is_equilateral_triangle_shape_axiom',axiom,(
    ! [V_c: '3d.Point',V_b: '3d.Point',V_a: '3d.Point'] :
      ( ( '3d.triangle-type/1' @ ( '3d.triangle/3' @ V_a @ V_b @ V_c ) )
     => ( ( '3d.is-equilateral-triangle/1' @ ( '3d.triangle/3' @ V_a @ V_b @ V_c ) )
      <=> ( '3d.is-equilateral-triangle/3' @ V_a @ V_b @ V_c ) ) ) )).

thf('3d.def_is_isosceles_triangle_axiom',axiom,(
    ! [V_a: '3d.Point',V_b: '3d.Point',V_c: '3d.Point'] :
      ( ( '3d.is-isosceles-triangle/3' @ V_a @ V_b @ V_c )
    <=> ( ( '3d.is-triangle/3' @ V_a @ V_b @ V_c )
        & ( ( ( '3d.distance/2' @ V_a @ V_b )
            = ( '3d.distance/2' @ V_b @ V_c ) )
          | ( ( '3d.distance/2' @ V_b @ V_c )
            = ( '3d.distance/2' @ V_c @ V_a ) )
          | ( ( '3d.distance/2' @ V_c @ V_a )
            = ( '3d.distance/2' @ V_a @ V_b ) ) ) ) ) )).

thf('3d.def_is_isosceles_triangle_shape_axiom',axiom,(
    ! [V_c: '3d.Point',V_b: '3d.Point',V_a: '3d.Point'] :
      ( ( '3d.triangle-type/1' @ ( '3d.triangle/3' @ V_a @ V_b @ V_c ) )
     => ( ( '3d.is-isosceles-triangle/1' @ ( '3d.triangle/3' @ V_a @ V_b @ V_c ) )
      <=> ( '3d.is-isosceles-triangle/3' @ V_a @ V_b @ V_c ) ) ) )).

thf('3d.def_is_incenter_of_axiom',axiom,(
    ! [V_c: '3d.Point',V_b: '3d.Point',V_a: '3d.Point',V_p: '3d.Point'] :
      ( ( '3d.triangle-type/1' @ ( '3d.triangle/3' @ V_a @ V_b @ V_c ) )
     => ( ( '3d.is-incenter-of/2' @ V_p @ ( '3d.triangle/3' @ V_a @ V_b @ V_c ) )
      <=> ( V_p
          = ( '3d.vec->point/1' @ ( '3d.sv*/2' @ ( $quotient @ 1.0 @ ( $sum @ ( '3d.distance/2' @ V_a @ V_b ) @ ( $sum @ ( '3d.distance/2' @ V_b @ V_c ) @ ( '3d.distance/2' @ V_c @ V_a ) ) ) ) @ ( '3d.v+/2' @ ( '3d.sv*/2' @ ( '3d.distance/2' @ V_b @ V_c ) @ ( '3d.vec/2' @ '3d.origin/0' @ V_a ) ) @ ( '3d.v+/2' @ ( '3d.sv*/2' @ ( '3d.distance/2' @ V_c @ V_a ) @ ( '3d.vec/2' @ '3d.origin/0' @ V_b ) ) @ ( '3d.sv*/2' @ ( '3d.distance/2' @ V_a @ V_b ) @ ( '3d.vec/2' @ '3d.origin/0' @ V_c ) ) ) ) ) ) ) ) ) )).

thf('3d.def_is_circumcenter_of_axiom',axiom,(
    ! [V_c: '3d.Point',V_b: '3d.Point',V_a: '3d.Point',V_p: '3d.Point'] :
      ( ( '3d.triangle-type/1' @ ( '3d.triangle/3' @ V_a @ V_b @ V_c ) )
     => ( ( '3d.is-circumcenter-of/2' @ V_p @ ( '3d.triangle/3' @ V_a @ V_b @ V_c ) )
      <=> ( ( '3d.perpendicular/2' @ ( '3d.line/2' @ V_a @ V_b ) @ ( '3d.line/2' @ V_p @ ( '3d.midpoint-of/2' @ V_a @ V_b ) ) )
          & ( '3d.perpendicular/2' @ ( '3d.line/2' @ V_b @ V_c ) @ ( '3d.line/2' @ V_p @ ( '3d.midpoint-of/2' @ V_b @ V_c ) ) ) ) ) ) )).

thf('3d.def_is_orthocenter_of_axiom',axiom,(
    ! [V_c: '3d.Point',V_b: '3d.Point',V_a: '3d.Point',V_p: '3d.Point'] :
      ( ( '3d.triangle-type/1' @ ( '3d.triangle/3' @ V_a @ V_b @ V_c ) )
     => ( ( '3d.is-orthocenter-of/2' @ V_p @ ( '3d.triangle/3' @ V_a @ V_b @ V_c ) )
      <=> ( ( '3d.perpendicular/2' @ ( '3d.line/2' @ V_a @ V_p ) @ ( '3d.line/2' @ V_b @ V_c ) )
          & ( '3d.perpendicular/2' @ ( '3d.line/2' @ V_b @ V_p ) @ ( '3d.line/2' @ V_c @ V_a ) )
          & ( '3d.perpendicular/2' @ ( '3d.line/2' @ V_c @ V_p ) @ ( '3d.line/2' @ V_a @ V_b ) ) ) ) ) )).

thf('3d.def_center_of_gravity_of_triangle_3d_axiom',axiom,(
    ! [V_C: '3d.Point',V_B: '3d.Point',V_A: '3d.Point',V_G: '3d.Point'] :
      ( ( '3d.triangle-type/1' @ ( '3d.triangle/3' @ V_A @ V_B @ V_C ) )
     => ( ( '3d.is-center-of-gravity-of/2' @ V_G @ ( '3d.triangle/3' @ V_A @ V_B @ V_C ) )
      <=> ( V_G
          = ( '3d.vec->point/1' @ ( '3d.sv*/2' @ ( $quotient @ 1.0 @ 3.0 ) @ ( '3d.v+/2' @ ( '3d.v+/2' @ ( '3d.vec/2' @ '3d.origin/0' @ V_A ) @ ( '3d.vec/2' @ '3d.origin/0' @ V_B ) ) @ ( '3d.vec/2' @ '3d.origin/0' @ V_C ) ) ) ) ) ) ) )).

thf('3d.def_is_diagonal_of_axiom',axiom,(
    ! [V_d: '3d.Point',V_c: '3d.Point',V_b: '3d.Point',V_a: '3d.Point',V_s: '3d.Shape'] :
      ( ( '3d.square-type/1' @ ( '3d.square/4' @ V_a @ V_b @ V_c @ V_d ) )
     => ( ( '3d.is-diagonal-of/2' @ V_s @ ( '3d.square/4' @ V_a @ V_b @ V_c @ V_d ) )
      <=> ( ( V_s
            = ( '3d.seg/2' @ V_a @ V_c ) )
          | ( V_s
            = ( '3d.seg/2' @ V_b @ V_d ) ) ) ) ) )).

thf('3d.def_square_opposite_side_axiom',axiom,(
    ! [V_m: '3d.Shape',V_l: '3d.Shape',V_d: '3d.Point',V_c: '3d.Point',V_b: '3d.Point',V_a: '3d.Point'] :
      ( ( '3d.square-type/1' @ ( '3d.square/4' @ V_a @ V_b @ V_c @ V_d ) )
     => ( ( '3d.square-opposite-side/3' @ ( '3d.square/4' @ V_a @ V_b @ V_c @ V_d ) @ V_l @ V_m )
      <=> ( ( ( V_l
              = ( '3d.seg/2' @ V_a @ V_b ) )
            & ( V_m
              = ( '3d.seg/2' @ V_c @ V_d ) ) )
          | ( ( V_l
              = ( '3d.seg/2' @ V_b @ V_c ) )
            & ( V_m
              = ( '3d.seg/2' @ V_d @ V_a ) ) )
          | ( ( V_l
              = ( '3d.seg/2' @ V_c @ V_d ) )
            & ( V_m
              = ( '3d.seg/2' @ V_a @ V_b ) ) )
          | ( ( V_l
              = ( '3d.seg/2' @ V_d @ V_a ) )
            & ( V_m
              = ( '3d.seg/2' @ V_b @ V_c ) ) ) ) ) ) )).

thf('3d.def_square_opposite_angle_axiom',axiom,(
    ! [V_m: '3d.Angle',V_l: '3d.Angle',V_d: '3d.Point',V_c: '3d.Point',V_b: '3d.Point',V_a: '3d.Point'] :
      ( ( '3d.square-type/1' @ ( '3d.square/4' @ V_a @ V_b @ V_c @ V_d ) )
     => ( ( '3d.square-opposite-angle/3' @ ( '3d.square/4' @ V_a @ V_b @ V_c @ V_d ) @ V_l @ V_m )
      <=> ( ( ( V_l
              = ( '3d.angle/3' @ V_a @ V_b @ V_c ) )
            & ( V_m
              = ( '3d.angle/3' @ V_c @ V_d @ V_a ) ) )
          | ( ( V_l
              = ( '3d.angle/3' @ V_b @ V_c @ V_d ) )
            & ( V_m
              = ( '3d.angle/3' @ V_d @ V_a @ V_b ) ) ) ) ) ) )).

thf('3d.def_is_square_axiom',axiom,(
    ! [V_P: '3d.Point',V_Q: '3d.Point',V_R: '3d.Point',V_S: '3d.Point'] :
      ( ( '3d.is-square/4' @ V_P @ V_Q @ V_R @ V_S )
    <=> ( ~ ( '3d.colinear/3' @ V_P @ V_Q @ V_R )
        & ~ ( '3d.colinear/3' @ V_Q @ V_R @ V_S )
        & ~ ( '3d.colinear/3' @ V_R @ V_S @ V_P )
        & ~ ( '3d.colinear/3' @ V_S @ V_P @ V_Q )
        & ? [V_T: '3d.Point'] :
            ( '3d.intersect/3' @ ( '3d.seg/2' @ V_P @ V_R ) @ ( '3d.seg/2' @ V_Q @ V_S ) @ V_T ) ) ) )).

thf('3d.def_is_regular_square_axiom',axiom,(
    ! [V_a: '3d.Point',V_b: '3d.Point',V_c: '3d.Point',V_d: '3d.Point'] :
      ( ( '3d.is-regular-square/4' @ V_a @ V_b @ V_c @ V_d )
    <=> ( ( '3d.is-rectangle/4' @ V_a @ V_b @ V_c @ V_d )
        & ( ( '3d.distance^2/2' @ V_a @ V_b )
          = ( '3d.distance^2/2' @ V_a @ V_d ) ) ) ) )).

thf('3d.def_is_regular_square_shape_axiom',axiom,(
    ! [V_d: '3d.Point',V_c: '3d.Point',V_b: '3d.Point',V_a: '3d.Point'] :
      ( ( '3d.square-type/1' @ ( '3d.square/4' @ V_a @ V_b @ V_c @ V_d ) )
     => ( ( '3d.is-regular-square/1' @ ( '3d.square/4' @ V_a @ V_b @ V_c @ V_d ) )
      <=> ( '3d.is-regular-square/4' @ V_a @ V_b @ V_c @ V_d ) ) ) )).

thf('3d.def_is_rectangle_axiom',axiom,(
    ! [V_a: '3d.Point',V_b: '3d.Point',V_c: '3d.Point',V_d: '3d.Point'] :
      ( ( '3d.is-rectangle/4' @ V_a @ V_b @ V_c @ V_d )
    <=> ( ( '3d.is-parallelogram/4' @ V_a @ V_b @ V_c @ V_d )
        & ( '3d.perpendicular/2' @ ( '3d.line/2' @ V_a @ V_b ) @ ( '3d.line/2' @ V_b @ V_c ) ) ) ) )).

thf('3d.def_is_rectangle_shape_axiom',axiom,(
    ! [V_d: '3d.Point',V_c: '3d.Point',V_b: '3d.Point',V_a: '3d.Point'] :
      ( ( '3d.square-type/1' @ ( '3d.square/4' @ V_a @ V_b @ V_c @ V_d ) )
     => ( ( '3d.is-rectangle/1' @ ( '3d.square/4' @ V_a @ V_b @ V_c @ V_d ) )
      <=> ( '3d.is-rectangle/4' @ V_a @ V_b @ V_c @ V_d ) ) ) )).

thf('3d.def_is_rhombus_axiom',axiom,(
    ! [V_a: '3d.Point',V_b: '3d.Point',V_c: '3d.Point',V_d: '3d.Point'] :
      ( ( '3d.is-rhombus/4' @ V_a @ V_b @ V_c @ V_d )
    <=> ( ( '3d.is-square/4' @ V_a @ V_b @ V_c @ V_d )
        & ( '3d.perpendicular/2' @ ( '3d.line/2' @ V_a @ V_c ) @ ( '3d.line/2' @ V_b @ V_d ) )
        & ( ( '3d.midpoint-of/2' @ V_a @ V_c )
          = ( '3d.midpoint-of/2' @ V_b @ V_d ) ) ) ) )).

thf('3d.def_is_rhombus_shape_axiom',axiom,(
    ! [V_d: '3d.Point',V_c: '3d.Point',V_b: '3d.Point',V_a: '3d.Point'] :
      ( ( '3d.square-type/1' @ ( '3d.square/4' @ V_a @ V_b @ V_c @ V_d ) )
     => ( ( '3d.is-rhombus/1' @ ( '3d.square/4' @ V_a @ V_b @ V_c @ V_d ) )
      <=> ( '3d.is-rhombus/4' @ V_a @ V_b @ V_c @ V_d ) ) ) )).

thf('3d.def_is_parallelogram_axiom',axiom,(
    ! [V_a: '3d.Point',V_b: '3d.Point',V_c: '3d.Point',V_d: '3d.Point'] :
      ( ( '3d.is-parallelogram/4' @ V_a @ V_b @ V_c @ V_d )
    <=> ( ( '3d.is-square/4' @ V_a @ V_b @ V_c @ V_d )
        & ( ( '3d.vec/2' @ '3d.origin/0' @ V_c )
          = ( '3d.v+/2' @ ( '3d.vec/2' @ '3d.origin/0' @ V_b ) @ ( '3d.vec/2' @ V_a @ V_d ) ) ) ) ) )).

thf('3d.def_is_parallelogram_shape_axiom',axiom,(
    ! [V_d: '3d.Point',V_c: '3d.Point',V_b: '3d.Point',V_a: '3d.Point'] :
      ( ( '3d.square-type/1' @ ( '3d.square/4' @ V_a @ V_b @ V_c @ V_d ) )
     => ( ( '3d.is-parallelogram/1' @ ( '3d.square/4' @ V_a @ V_b @ V_c @ V_d ) )
      <=> ( '3d.is-parallelogram/4' @ V_a @ V_b @ V_c @ V_d ) ) ) )).

thf('3d.def_is_trapezoid_axiom',axiom,(
    ! [V_a: '3d.Point',V_b: '3d.Point',V_c: '3d.Point',V_d: '3d.Point'] :
      ( ( '3d.is-trapezoid/4' @ V_a @ V_b @ V_c @ V_d )
    <=> ( ( '3d.is-square/4' @ V_a @ V_b @ V_c @ V_d )
        & ( ( '3d.parallel/2' @ ( '3d.line/2' @ V_a @ V_b ) @ ( '3d.line/2' @ V_c @ V_d ) )
          | ( '3d.parallel/2' @ ( '3d.line/2' @ V_b @ V_c ) @ ( '3d.line/2' @ V_d @ V_a ) ) ) ) ) )).

thf('3d.def_is_trapezoid_shape_axiom',axiom,(
    ! [V_d: '3d.Point',V_c: '3d.Point',V_b: '3d.Point',V_a: '3d.Point'] :
      ( ( '3d.square-type/1' @ ( '3d.square/4' @ V_a @ V_b @ V_c @ V_d ) )
     => ( ( '3d.is-trapezoid/1' @ ( '3d.square/4' @ V_a @ V_b @ V_c @ V_d ) )
      <=> ( '3d.is-trapezoid/4' @ V_a @ V_b @ V_c @ V_d ) ) ) )).

thf('3d.def_is_polygon_3d_axiom',axiom,(
    ! [V_ps: ( 'ListOf' @ '3d.Point' )] :
      ( ( '3d.is-polygon/1' @ V_ps )
    <=> ( '3d.points-coplanar/1' @ V_ps ) ) )).

thf('3d.def_is_vertex_of_triangle_axiom',axiom,(
    ! [V_z: '3d.Point',V_y: '3d.Point',V_x: '3d.Point',V_p: '3d.Point'] :
      ( ( '3d.triangle-type/1' @ ( '3d.triangle/3' @ V_x @ V_y @ V_z ) )
     => ( ( '3d.is-vertex-of/2' @ V_p @ ( '3d.triangle/3' @ V_x @ V_y @ V_z ) )
      <=> ( ( V_p = V_x )
          | ( V_p = V_y )
          | ( V_p = V_z ) ) ) ) )).

thf('3d.def_is_vertex_of_square_axiom',axiom,(
    ! [V_w: '3d.Point',V_z: '3d.Point',V_y: '3d.Point',V_x: '3d.Point',V_p: '3d.Point'] :
      ( ( '3d.square-type/1' @ ( '3d.square/4' @ V_x @ V_y @ V_z @ V_w ) )
     => ( ( '3d.is-vertex-of/2' @ V_p @ ( '3d.square/4' @ V_x @ V_y @ V_z @ V_w ) )
      <=> ( ( V_p = V_x )
          | ( V_p = V_y )
          | ( V_p = V_z )
          | ( V_p = V_w ) ) ) ) )).

thf('3d.def_is_vertex_of_polygon_axiom',axiom,(
    ! [V_ps: ( 'ListOf' @ '3d.Point' ),V_p: '3d.Point'] :
      ( ( '3d.polygon-type/1' @ ( '3d.polygon/1' @ V_ps ) )
     => ( ( '3d.is-vertex-of/2' @ V_p @ ( '3d.polygon/1' @ V_ps ) )
      <=> ( 'member/2' @ '3d.Point' @ V_p @ V_ps ) ) ) )).

thf('3d.def-are-vertices-of-triangle_axiom',axiom,(
    ! [V_C: '3d.Point',V_B: '3d.Point',V_A: '3d.Point',V_Ps: ( 'ListOf' @ '3d.Point' )] :
      ( ( '3d.triangle-type/1' @ ( '3d.triangle/3' @ V_A @ V_B @ V_C ) )
     => ( ( '3d.are-vertices-of/2' @ V_Ps @ ( '3d.triangle/3' @ V_A @ V_B @ V_C ) )
      <=> ( 'is-a-permutation-of/2' @ '3d.Point' @ V_Ps @ ( 'cons/2' @ '3d.Point' @ V_A @ ( 'cons/2' @ '3d.Point' @ V_B @ ( 'cons/2' @ '3d.Point' @ V_C @ ( 'nil/0' @ '3d.Point' ) ) ) ) ) ) ) )).

thf('3d.def-are-vertices-of-square_axiom',axiom,(
    ! [V_D: '3d.Point',V_C: '3d.Point',V_B: '3d.Point',V_A: '3d.Point',V_Ps: ( 'ListOf' @ '3d.Point' )] :
      ( ( '3d.square-type/1' @ ( '3d.square/4' @ V_A @ V_B @ V_C @ V_D ) )
     => ( ( '3d.are-vertices-of/2' @ V_Ps @ ( '3d.square/4' @ V_A @ V_B @ V_C @ V_D ) )
      <=> ( 'all/2' @ '3d.Point'
          @ ^ [V_p: '3d.Point'] :
              ( 'member/2' @ '3d.Point' @ V_p @ ( 'cons/2' @ '3d.Point' @ V_A @ ( 'cons/2' @ '3d.Point' @ V_B @ ( 'cons/2' @ '3d.Point' @ V_C @ ( 'cons/2' @ '3d.Point' @ V_D @ ( 'nil/0' @ '3d.Point' ) ) ) ) ) )
          @ V_Ps ) ) ) )).

thf('3d.def-are-vertices-of-polygon_axiom',axiom,(
    ! [V_Qs: ( 'ListOf' @ '3d.Point' ),V_Ps: ( 'ListOf' @ '3d.Point' )] :
      ( ( '3d.polygon-type/1' @ ( '3d.polygon/1' @ V_Qs ) )
     => ( ( '3d.are-vertices-of/2' @ V_Ps @ ( '3d.polygon/1' @ V_Qs ) )
      <=> ( 'is-a-permutation-of/2' @ '3d.Point' @ V_Ps @ V_Qs ) ) ) )).

thf('3d.def_form_triangle_axiom',axiom,(
    ! [V_w: '3d.Point',V_v: '3d.Point',V_u: '3d.Point',V_r: '3d.Point',V_q: '3d.Point',V_p: '3d.Point'] :
      ( ( '3d.triangle-type/1' @ ( '3d.triangle/3' @ V_u @ V_v @ V_w ) )
     => ( ( '3d.form/2' @ ( 'cons/2' @ '3d.Point' @ V_p @ ( 'cons/2' @ '3d.Point' @ V_q @ ( 'cons/2' @ '3d.Point' @ V_r @ ( 'nil/0' @ '3d.Point' ) ) ) ) @ ( '3d.triangle/3' @ V_u @ V_v @ V_w ) )
      <=> ( ( ( V_p = V_u )
            & ( V_q = V_v )
            & ( V_r = V_w ) )
          | ( ( V_p = V_u )
            & ( V_q = V_w )
            & ( V_r = V_v ) )
          | ( ( V_p = V_v )
            & ( V_q = V_u )
            & ( V_r = V_w ) )
          | ( ( V_p = V_v )
            & ( V_q = V_w )
            & ( V_r = V_u ) )
          | ( ( V_p = V_w )
            & ( V_q = V_u )
            & ( V_r = V_v ) )
          | ( ( V_p = V_w )
            & ( V_q = V_v )
            & ( V_r = V_u ) ) ) ) ) )).

thf('3d.def_form_triangle_by_lines_axiom',axiom,(
    ! [V_w: '3d.Point',V_v: '3d.Point',V_u: '3d.Point',V_l3: '3d.Shape',V_l2: '3d.Shape',V_l1: '3d.Shape'] :
      ( ( '3d.triangle-type/1' @ ( '3d.triangle/3' @ V_u @ V_v @ V_w ) )
     => ( ( '3d.form-by-shapes/2' @ ( 'cons/2' @ '3d.Shape' @ V_l1 @ ( 'cons/2' @ '3d.Shape' @ V_l2 @ ( 'cons/2' @ '3d.Shape' @ V_l3 @ ( 'nil/0' @ '3d.Shape' ) ) ) ) @ ( '3d.triangle/3' @ V_u @ V_v @ V_w ) )
      <=> ? [V_p: '3d.Point',V_q: '3d.Point',V_r: '3d.Point'] :
            ( ( '3d.intersect/3' @ V_l1 @ V_l2 @ V_p )
            & ( '3d.intersect/3' @ V_l2 @ V_l3 @ V_q )
            & ( '3d.intersect/3' @ V_l3 @ V_l1 @ V_r )
            & ( '3d.form/2' @ ( 'cons/2' @ '3d.Point' @ V_p @ ( 'cons/2' @ '3d.Point' @ V_q @ ( 'cons/2' @ '3d.Point' @ V_r @ ( 'nil/0' @ '3d.Point' ) ) ) ) @ ( '3d.triangle/3' @ V_u @ V_v @ V_w ) ) ) ) ) )).

thf('3d.def_triangle_centroid_axiom',axiom,(
    ! [V_r: '3d.Point',V_q: '3d.Point',V_p: '3d.Point'] :
      ( ( '3d.triangle-type/1' @ ( '3d.triangle/3' @ V_p @ V_q @ V_r ) )
     => ( ( '3d.centroid-of/1' @ ( '3d.triangle/3' @ V_p @ V_q @ V_r ) )
        = ( '3d.vec->point/1' @ ( '3d.sv*/2' @ ( $quotient @ 1.0 @ 3.0 ) @ ( '3d.v+/2' @ ( '3d.vec/2' @ '3d.origin/0' @ V_p ) @ ( '3d.v+/2' @ ( '3d.vec/2' @ '3d.origin/0' @ V_q ) @ ( '3d.vec/2' @ '3d.origin/0' @ V_r ) ) ) ) ) ) ) )).

thf('3d.def_is_triangle_axiom',axiom,(
    ! [V_p: '3d.Point',V_q: '3d.Point',V_r: '3d.Point'] :
      ( ( '3d.is-triangle/3' @ V_p @ V_q @ V_r )
    <=> ~ ( '3d.colinear/3' @ V_p @ V_q @ V_r ) ) )).

thf('3d.similar-sub/2_type',type,(
    '3d.similar-sub/2': '3d.Shape' > '3d.Shape' > $o )).

thf('3d.def_similar_sub_triangle_axiom',axiom,(
    ! [V_C: '3d.Point',V_B: '3d.Point',V_A: '3d.Point',V_c: '3d.Point',V_b: '3d.Point',V_a: '3d.Point'] :
      ( ( ( '3d.triangle-type/1' @ ( '3d.triangle/3' @ V_a @ V_b @ V_c ) )
        & ( '3d.triangle-type/1' @ ( '3d.triangle/3' @ V_A @ V_B @ V_C ) ) )
     => ( ( '3d.similar-sub/2' @ ( '3d.triangle/3' @ V_a @ V_b @ V_c ) @ ( '3d.triangle/3' @ V_A @ V_B @ V_C ) )
      <=> ( ( '3d.same-angle/2' @ ( '3d.angle/3' @ V_a @ V_b @ V_c ) @ ( '3d.angle/3' @ V_A @ V_B @ V_C ) )
          & ( ( '3d.same-angle/2' @ ( '3d.angle/3' @ V_b @ V_c @ V_a ) @ ( '3d.angle/3' @ V_B @ V_C @ V_A ) )
            | ( '3d.same-angle/2' @ ( '3d.angle/3' @ V_b @ V_c @ V_a ) @ ( '3d.angle/3' @ V_C @ V_A @ V_B ) ) ) ) ) ) )).

thf('3d.def_similar_sub_square_axiom',axiom,(
    ! [V_D: '3d.Point',V_C: '3d.Point',V_B: '3d.Point',V_A: '3d.Point',V_d: '3d.Point',V_c: '3d.Point',V_b: '3d.Point',V_a: '3d.Point'] :
      ( ( ( '3d.square-type/1' @ ( '3d.square/4' @ V_a @ V_b @ V_c @ V_d ) )
        & ( '3d.square-type/1' @ ( '3d.square/4' @ V_A @ V_B @ V_C @ V_D ) ) )
     => ( ( '3d.similar-sub/2' @ ( '3d.square/4' @ V_a @ V_b @ V_c @ V_d ) @ ( '3d.square/4' @ V_A @ V_B @ V_C @ V_D ) )
      <=> ( ( '3d.same-angle/2' @ ( '3d.angle/3' @ V_d @ V_a @ V_b ) @ ( '3d.angle/3' @ V_D @ V_A @ V_B ) )
          & ( ( ( '3d.same-angle/2' @ ( '3d.angle/3' @ V_a @ V_b @ V_c ) @ ( '3d.angle/3' @ V_A @ V_B @ V_C ) )
              & ( '3d.same-angle/2' @ ( '3d.angle/3' @ V_c @ V_d @ V_a ) @ ( '3d.angle/3' @ V_C @ V_D @ V_A ) )
              & ( ( $product @ ( '3d.distance^2/2' @ V_a @ V_b ) @ ( '3d.distance^2/2' @ V_A @ V_D ) )
                = ( $product @ ( '3d.distance^2/2' @ V_a @ V_d ) @ ( '3d.distance^2/2' @ V_A @ V_B ) ) ) )
            | ( ( '3d.same-angle/2' @ ( '3d.angle/3' @ V_a @ V_b @ V_c ) @ ( '3d.angle/3' @ V_C @ V_D @ V_A ) )
              & ( '3d.same-angle/2' @ ( '3d.angle/3' @ V_c @ V_d @ V_a ) @ ( '3d.angle/3' @ V_A @ V_B @ V_C ) )
              & ( ( $product @ ( '3d.distance^2/2' @ V_a @ V_b ) @ ( '3d.distance^2/2' @ V_A @ V_B ) )
                = ( $product @ ( '3d.distance^2/2' @ V_a @ V_d ) @ ( '3d.distance^2/2' @ V_A @ V_D ) ) ) ) ) ) ) ) )).

thf('3d.def_similar_triangle_axiom',axiom,(
    ! [V_C: '3d.Point',V_B: '3d.Point',V_A: '3d.Point',V_c: '3d.Point',V_b: '3d.Point',V_a: '3d.Point'] :
      ( ( ( '3d.triangle-type/1' @ ( '3d.triangle/3' @ V_a @ V_b @ V_c ) )
        & ( '3d.triangle-type/1' @ ( '3d.triangle/3' @ V_A @ V_B @ V_C ) ) )
     => ( ( '3d.similar/2' @ ( '3d.triangle/3' @ V_a @ V_b @ V_c ) @ ( '3d.triangle/3' @ V_A @ V_B @ V_C ) )
      <=> ( ( '3d.similar-sub/2' @ ( '3d.triangle/3' @ V_a @ V_b @ V_c ) @ ( '3d.triangle/3' @ V_A @ V_B @ V_C ) )
          | ( '3d.similar-sub/2' @ ( '3d.triangle/3' @ V_a @ V_b @ V_c ) @ ( '3d.triangle/3' @ V_B @ V_C @ V_A ) )
          | ( '3d.similar-sub/2' @ ( '3d.triangle/3' @ V_a @ V_b @ V_c ) @ ( '3d.triangle/3' @ V_C @ V_A @ V_B ) ) ) ) ) )).

thf('3d.def_similar_square_axiom',axiom,(
    ! [V_D: '3d.Point',V_C: '3d.Point',V_B: '3d.Point',V_A: '3d.Point',V_d: '3d.Point',V_c: '3d.Point',V_b: '3d.Point',V_a: '3d.Point'] :
      ( ( ( '3d.square-type/1' @ ( '3d.square/4' @ V_a @ V_b @ V_c @ V_d ) )
        & ( '3d.square-type/1' @ ( '3d.square/4' @ V_A @ V_B @ V_C @ V_D ) ) )
     => ( ( '3d.similar/2' @ ( '3d.square/4' @ V_a @ V_b @ V_c @ V_d ) @ ( '3d.square/4' @ V_A @ V_B @ V_C @ V_D ) )
      <=> ( ( '3d.similar-sub/2' @ ( '3d.square/4' @ V_a @ V_b @ V_c @ V_d ) @ ( '3d.square/4' @ V_A @ V_B @ V_C @ V_D ) )
          | ( '3d.similar-sub/2' @ ( '3d.square/4' @ V_a @ V_b @ V_c @ V_d ) @ ( '3d.square/4' @ V_B @ V_C @ V_D @ V_A ) )
          | ( '3d.similar-sub/2' @ ( '3d.square/4' @ V_a @ V_b @ V_c @ V_d ) @ ( '3d.square/4' @ V_C @ V_D @ V_A @ V_B ) )
          | ( '3d.similar-sub/2' @ ( '3d.square/4' @ V_a @ V_b @ V_c @ V_d ) @ ( '3d.square/4' @ V_D @ V_A @ V_B @ V_C ) ) ) ) ) )).

thf('3d.def_ordered_similar_triangle_axiom',axiom,(
    ! [V_C: '3d.Point',V_B: '3d.Point',V_A: '3d.Point',V_c: '3d.Point',V_b: '3d.Point',V_a: '3d.Point'] :
      ( ( ( '3d.triangle-type/1' @ ( '3d.triangle/3' @ V_a @ V_b @ V_c ) )
        & ( '3d.triangle-type/1' @ ( '3d.triangle/3' @ V_A @ V_B @ V_C ) ) )
     => ( ( '3d.ordered-similar/2' @ ( '3d.triangle/3' @ V_a @ V_b @ V_c ) @ ( '3d.triangle/3' @ V_A @ V_B @ V_C ) )
      <=> ( ( '3d.same-angle/2' @ ( '3d.angle/3' @ V_a @ V_b @ V_c ) @ ( '3d.angle/3' @ V_A @ V_B @ V_C ) )
          & ( '3d.same-angle/2' @ ( '3d.angle/3' @ V_b @ V_c @ V_a ) @ ( '3d.angle/3' @ V_B @ V_C @ V_A ) ) ) ) ) )).

thf('3d.def_ordered_similar_square_axiom',axiom,(
    ! [V_D: '3d.Point',V_C: '3d.Point',V_B: '3d.Point',V_A: '3d.Point',V_d: '3d.Point',V_c: '3d.Point',V_b: '3d.Point',V_a: '3d.Point'] :
      ( ( ( '3d.square-type/1' @ ( '3d.square/4' @ V_a @ V_b @ V_c @ V_d ) )
        & ( '3d.square-type/1' @ ( '3d.square/4' @ V_A @ V_B @ V_C @ V_D ) ) )
     => ( ( '3d.ordered-similar/2' @ ( '3d.square/4' @ V_a @ V_b @ V_c @ V_d ) @ ( '3d.square/4' @ V_A @ V_B @ V_C @ V_D ) )
      <=> ( ( '3d.same-angle/2' @ ( '3d.angle/3' @ V_d @ V_a @ V_b ) @ ( '3d.angle/3' @ V_D @ V_A @ V_B ) )
          & ( '3d.same-angle/2' @ ( '3d.angle/3' @ V_a @ V_b @ V_c ) @ ( '3d.angle/3' @ V_A @ V_B @ V_C ) )
          & ( '3d.same-angle/2' @ ( '3d.angle/3' @ V_c @ V_d @ V_a ) @ ( '3d.angle/3' @ V_C @ V_D @ V_A ) )
          & ( ( $product @ ( '3d.distance^2/2' @ V_a @ V_b ) @ ( '3d.distance^2/2' @ V_A @ V_D ) )
            = ( $product @ ( '3d.distance^2/2' @ V_a @ V_d ) @ ( '3d.distance^2/2' @ V_A @ V_B ) ) ) ) ) ) )).

thf('3d.congruent-sub/2_type',type,(
    '3d.congruent-sub/2': '3d.Shape' > '3d.Shape' > $o )).

thf('3d.def_congruent_sub_triangle_axiom',axiom,(
    ! [V_C: '3d.Point',V_B: '3d.Point',V_A: '3d.Point',V_c: '3d.Point',V_b: '3d.Point',V_a: '3d.Point'] :
      ( ( ( '3d.triangle-type/1' @ ( '3d.triangle/3' @ V_a @ V_b @ V_c ) )
        & ( '3d.triangle-type/1' @ ( '3d.triangle/3' @ V_A @ V_B @ V_C ) ) )
     => ( ( '3d.congruent-sub/2' @ ( '3d.triangle/3' @ V_a @ V_b @ V_c ) @ ( '3d.triangle/3' @ V_A @ V_B @ V_C ) )
      <=> ( ( ( '3d.distance^2/2' @ V_a @ V_b )
            = ( '3d.distance^2/2' @ V_A @ V_B ) )
          & ( ( ( ( '3d.distance^2/2' @ V_b @ V_c )
                = ( '3d.distance^2/2' @ V_B @ V_C ) )
              & ( ( '3d.distance^2/2' @ V_c @ V_a )
                = ( '3d.distance^2/2' @ V_C @ V_A ) ) )
            | ( ( ( '3d.distance^2/2' @ V_b @ V_c )
                = ( '3d.distance^2/2' @ V_C @ V_A ) )
              & ( ( '3d.distance^2/2' @ V_c @ V_a )
                = ( '3d.distance^2/2' @ V_B @ V_C ) ) ) ) ) ) ) )).

thf('3d.def_congruent_sub_square_axiom',axiom,(
    ! [V_D: '3d.Point',V_C: '3d.Point',V_B: '3d.Point',V_A: '3d.Point',V_d: '3d.Point',V_c: '3d.Point',V_b: '3d.Point',V_a: '3d.Point'] :
      ( ( ( '3d.square-type/1' @ ( '3d.square/4' @ V_a @ V_b @ V_c @ V_d ) )
        & ( '3d.square-type/1' @ ( '3d.square/4' @ V_A @ V_B @ V_C @ V_D ) ) )
     => ( ( '3d.congruent-sub/2' @ ( '3d.square/4' @ V_a @ V_b @ V_c @ V_d ) @ ( '3d.square/4' @ V_A @ V_B @ V_C @ V_D ) )
      <=> ( ( '3d.same-angle/2' @ ( '3d.angle/3' @ V_d @ V_a @ V_b ) @ ( '3d.angle/3' @ V_D @ V_A @ V_B ) )
          & ( ( ( '3d.same-angle/2' @ ( '3d.angle/3' @ V_a @ V_b @ V_c ) @ ( '3d.angle/3' @ V_A @ V_B @ V_C ) )
              & ( '3d.same-angle/2' @ ( '3d.angle/3' @ V_c @ V_d @ V_a ) @ ( '3d.angle/3' @ V_C @ V_D @ V_A ) )
              & ( ( '3d.distance^2/2' @ V_a @ V_b )
                = ( '3d.distance^2/2' @ V_A @ V_B ) )
              & ( ( '3d.distance^2/2' @ V_a @ V_d )
                = ( '3d.distance^2/2' @ V_A @ V_D ) ) )
            | ( ( '3d.same-angle/2' @ ( '3d.angle/3' @ V_a @ V_b @ V_c ) @ ( '3d.angle/3' @ V_C @ V_D @ V_A ) )
              & ( '3d.same-angle/2' @ ( '3d.angle/3' @ V_c @ V_d @ V_a ) @ ( '3d.angle/3' @ V_A @ V_B @ V_C ) )
              & ( ( '3d.distance^2/2' @ V_a @ V_b )
                = ( '3d.distance^2/2' @ V_A @ V_D ) )
              & ( ( '3d.distance^2/2' @ V_a @ V_d )
                = ( '3d.distance^2/2' @ V_A @ V_B ) ) ) ) ) ) ) )).

thf('3d.def_congruent_triangle_axiom',axiom,(
    ! [V_C: '3d.Point',V_B: '3d.Point',V_A: '3d.Point',V_c: '3d.Point',V_b: '3d.Point',V_a: '3d.Point'] :
      ( ( ( '3d.triangle-type/1' @ ( '3d.triangle/3' @ V_a @ V_b @ V_c ) )
        & ( '3d.triangle-type/1' @ ( '3d.triangle/3' @ V_A @ V_B @ V_C ) ) )
     => ( ( '3d.congruent/2' @ ( '3d.triangle/3' @ V_a @ V_b @ V_c ) @ ( '3d.triangle/3' @ V_A @ V_B @ V_C ) )
      <=> ( ( '3d.congruent-sub/2' @ ( '3d.triangle/3' @ V_a @ V_b @ V_c ) @ ( '3d.triangle/3' @ V_A @ V_B @ V_C ) )
          | ( '3d.congruent-sub/2' @ ( '3d.triangle/3' @ V_a @ V_b @ V_c ) @ ( '3d.triangle/3' @ V_B @ V_C @ V_A ) )
          | ( '3d.congruent-sub/2' @ ( '3d.triangle/3' @ V_a @ V_b @ V_c ) @ ( '3d.triangle/3' @ V_C @ V_A @ V_B ) ) ) ) ) )).

thf('3d.def_congruent_square_axiom',axiom,(
    ! [V_D: '3d.Point',V_C: '3d.Point',V_B: '3d.Point',V_A: '3d.Point',V_d: '3d.Point',V_c: '3d.Point',V_b: '3d.Point',V_a: '3d.Point'] :
      ( ( ( '3d.square-type/1' @ ( '3d.square/4' @ V_a @ V_b @ V_c @ V_d ) )
        & ( '3d.square-type/1' @ ( '3d.square/4' @ V_A @ V_B @ V_C @ V_D ) ) )
     => ( ( '3d.congruent/2' @ ( '3d.square/4' @ V_a @ V_b @ V_c @ V_d ) @ ( '3d.square/4' @ V_A @ V_B @ V_C @ V_D ) )
      <=> ( ( '3d.congruent-sub/2' @ ( '3d.square/4' @ V_a @ V_b @ V_c @ V_d ) @ ( '3d.square/4' @ V_A @ V_B @ V_C @ V_D ) )
          | ( '3d.congruent-sub/2' @ ( '3d.square/4' @ V_a @ V_b @ V_c @ V_d ) @ ( '3d.square/4' @ V_B @ V_C @ V_D @ V_A ) )
          | ( '3d.congruent-sub/2' @ ( '3d.square/4' @ V_a @ V_b @ V_c @ V_d ) @ ( '3d.square/4' @ V_C @ V_D @ V_A @ V_B ) )
          | ( '3d.congruent-sub/2' @ ( '3d.square/4' @ V_a @ V_b @ V_c @ V_d ) @ ( '3d.square/4' @ V_D @ V_A @ V_B @ V_C ) ) ) ) ) )).

thf('3d.def_ordered_congruent_triangle_axiom',axiom,(
    ! [V_C: '3d.Point',V_B: '3d.Point',V_A: '3d.Point',V_c: '3d.Point',V_b: '3d.Point',V_a: '3d.Point'] :
      ( ( ( '3d.triangle-type/1' @ ( '3d.triangle/3' @ V_a @ V_b @ V_c ) )
        & ( '3d.triangle-type/1' @ ( '3d.triangle/3' @ V_A @ V_B @ V_C ) ) )
     => ( ( '3d.ordered-congruent/2' @ ( '3d.triangle/3' @ V_a @ V_b @ V_c ) @ ( '3d.triangle/3' @ V_A @ V_B @ V_C ) )
      <=> ( ( ( '3d.distance^2/2' @ V_a @ V_b )
            = ( '3d.distance^2/2' @ V_A @ V_B ) )
          & ( ( '3d.distance^2/2' @ V_b @ V_c )
            = ( '3d.distance^2/2' @ V_B @ V_C ) )
          & ( ( '3d.distance^2/2' @ V_c @ V_a )
            = ( '3d.distance^2/2' @ V_C @ V_A ) ) ) ) ) )).

thf('3d.def_ordered_congruent_square_axiom',axiom,(
    ! [V_D: '3d.Point',V_C: '3d.Point',V_B: '3d.Point',V_A: '3d.Point',V_d: '3d.Point',V_c: '3d.Point',V_b: '3d.Point',V_a: '3d.Point'] :
      ( ( ( '3d.square-type/1' @ ( '3d.square/4' @ V_a @ V_b @ V_c @ V_d ) )
        & ( '3d.square-type/1' @ ( '3d.square/4' @ V_A @ V_B @ V_C @ V_D ) ) )
     => ( ( '3d.ordered-congruent/2' @ ( '3d.square/4' @ V_a @ V_b @ V_c @ V_d ) @ ( '3d.square/4' @ V_A @ V_B @ V_C @ V_D ) )
      <=> ( ( '3d.same-angle/2' @ ( '3d.angle/3' @ V_d @ V_a @ V_b ) @ ( '3d.angle/3' @ V_D @ V_A @ V_B ) )
          & ( '3d.same-angle/2' @ ( '3d.angle/3' @ V_a @ V_b @ V_c ) @ ( '3d.angle/3' @ V_A @ V_B @ V_C ) )
          & ( '3d.same-angle/2' @ ( '3d.angle/3' @ V_c @ V_d @ V_a ) @ ( '3d.angle/3' @ V_C @ V_D @ V_A ) )
          & ( ( '3d.distance^2/2' @ V_a @ V_b )
            = ( '3d.distance^2/2' @ V_A @ V_B ) )
          & ( ( '3d.distance^2/2' @ V_a @ V_d )
            = ( '3d.distance^2/2' @ V_A @ V_D ) ) ) ) ) )).

thf('3d.def_is_regular_polygon_axiom',axiom,(
    ! [V_ps: ( 'ListOf' @ '3d.Point' ),V_p2: '3d.Point',V_p1: '3d.Point',V_p0: '3d.Point'] :
      ( ( '3d.polygon-type/1' @ ( '3d.polygon/1' @ ( 'cons/2' @ '3d.Point' @ V_p0 @ ( 'cons/2' @ '3d.Point' @ V_p1 @ ( 'cons/2' @ '3d.Point' @ V_p2 @ V_ps ) ) ) ) )
     => ( ( '3d.is-regular-polygon/1' @ ( '3d.polygon/1' @ ( 'cons/2' @ '3d.Point' @ V_p0 @ ( 'cons/2' @ '3d.Point' @ V_p1 @ ( 'cons/2' @ '3d.Point' @ V_p2 @ V_ps ) ) ) ) )
      <=> ( ( '3d.points-coplanar/1' @ ( 'cons/2' @ '3d.Point' @ V_p0 @ ( 'cons/2' @ '3d.Point' @ V_p1 @ ( 'cons/2' @ '3d.Point' @ V_p2 @ V_ps ) ) ) )
          & ( '3d.points-with-equal-interval/1' @ ( 'cons/2' @ '3d.Point' @ V_p0 @ ( 'cons/2' @ '3d.Point' @ V_p1 @ ( 'cons/2' @ '3d.Point' @ V_p2 @ V_ps ) ) ) )
          & ( '3d.points-bending-by-equal-angle/1' @ ( 'cons/2' @ '3d.Point' @ V_p0 @ ( 'cons/2' @ '3d.Point' @ V_p1 @ ( 'cons/2' @ '3d.Point' @ V_p2 @ V_ps ) ) ) )
          & ( '3d.points-bending-to-same-side/1' @ ( 'cons/2' @ '3d.Point' @ V_p0 @ ( 'cons/2' @ '3d.Point' @ V_p1 @ ( 'cons/2' @ '3d.Point' @ V_p2 @ V_ps ) ) ) )
          & ( 'all/2' @ '3d.Point'
            @ ^ [V_p: '3d.Point'] :
                ( '3d.on/2' @ V_p @ ( '3d.inner-part-of/1' @ ( '3d.divided-region-including/2' @ ( '3d.line/2' @ V_p0 @ V_p1 ) @ V_p2 ) ) )
            @ V_ps ) ) ) ) )).

thf('3d.is-convex-shape-rec/1_type',type,(
    '3d.is-convex-shape-rec/1': '3d.Shape' > $o )).

thf('3d.def_is_convex_shape_rec_polygon0_axiom',axiom,
    ( ( '3d.is-convex-shape-rec/1' @ ( '3d.polygon/1' @ ( 'nil/0' @ '3d.Point' ) ) )
  <=> $true )).

thf('3d.def_is_convex_shape_rec_polygon1_axiom',axiom,(
    ! [V_p0: '3d.Point'] :
      ( ( '3d.polygon-type/1' @ ( '3d.polygon/1' @ ( 'cons/2' @ '3d.Point' @ V_p0 @ ( 'nil/0' @ '3d.Point' ) ) ) )
     => ( ( '3d.is-convex-shape-rec/1' @ ( '3d.polygon/1' @ ( 'cons/2' @ '3d.Point' @ V_p0 @ ( 'nil/0' @ '3d.Point' ) ) ) )
      <=> $true ) ) )).

thf('3d.def_is_convex_shape_rec_polygon2_axiom',axiom,(
    ! [V_p1: '3d.Point',V_p0: '3d.Point'] :
      ( ( '3d.polygon-type/1' @ ( '3d.polygon/1' @ ( 'cons/2' @ '3d.Point' @ V_p0 @ ( 'cons/2' @ '3d.Point' @ V_p1 @ ( 'nil/0' @ '3d.Point' ) ) ) ) )
     => ( ( '3d.is-convex-shape-rec/1' @ ( '3d.polygon/1' @ ( 'cons/2' @ '3d.Point' @ V_p0 @ ( 'cons/2' @ '3d.Point' @ V_p1 @ ( 'nil/0' @ '3d.Point' ) ) ) ) )
      <=> $true ) ) )).

thf('3d.def_is_convex_shape_rec_polygon3_axiom',axiom,(
    ! [V_p2: '3d.Point',V_p1: '3d.Point',V_p0: '3d.Point'] :
      ( ( '3d.polygon-type/1' @ ( '3d.polygon/1' @ ( 'cons/2' @ '3d.Point' @ V_p2 @ ( 'cons/2' @ '3d.Point' @ V_p0 @ ( 'cons/2' @ '3d.Point' @ V_p1 @ ( 'nil/0' @ '3d.Point' ) ) ) ) ) )
     => ( ( '3d.is-convex-shape-rec/1' @ ( '3d.polygon/1' @ ( 'cons/2' @ '3d.Point' @ V_p2 @ ( 'cons/2' @ '3d.Point' @ V_p0 @ ( 'cons/2' @ '3d.Point' @ V_p1 @ ( 'nil/0' @ '3d.Point' ) ) ) ) ) )
      <=> $true ) ) )).

thf('3d.def_is_convex_shape_polygon_rec_axiom',axiom,(
    ! [V_ps: ( 'ListOf' @ '3d.Point' ),V_p2: '3d.Point',V_p1: '3d.Point',V_p0: '3d.Point'] :
      ( ( '3d.polygon-type/1' @ ( '3d.polygon/1' @ ( 'cons/2' @ '3d.Point' @ V_p0 @ ( 'cons/2' @ '3d.Point' @ V_p1 @ ( 'cons/2' @ '3d.Point' @ V_p2 @ V_ps ) ) ) ) )
     => ( ( '3d.is-convex-shape/1' @ ( '3d.polygon/1' @ ( 'cons/2' @ '3d.Point' @ V_p0 @ ( 'cons/2' @ '3d.Point' @ V_p1 @ ( 'cons/2' @ '3d.Point' @ V_p2 @ V_ps ) ) ) ) )
      <=> ( ( 'all/2' @ '3d.Point'
            @ ^ [V_p: '3d.Point'] :
                ( '3d.on/2' @ V_p @ ( '3d.inner-part-of/1' @ ( '3d.divided-region-including/2' @ ( '3d.line/2' @ V_p0 @ V_p1 ) @ V_p2 ) ) )
            @ V_ps )
          & ( '3d.is-convex-shape-rec/1' @ ( '3d.polygon/1' @ ( 'cons/2' @ '3d.Point' @ V_p1 @ ( 'cons/2' @ '3d.Point' @ V_p2 @ V_ps ) ) ) ) ) ) ) )).

thf('3d.def_is_convex_shape_polygon_axiom',axiom,(
    ! [V_vertices: ( 'ListOf' @ '3d.Point' )] :
      ( ( '3d.polygon-type/1' @ ( '3d.polygon/1' @ V_vertices ) )
     => ( ( '3d.is-convex-shape/1' @ ( '3d.polygon/1' @ V_vertices ) )
      <=> ( ( '3d.points-bending-to-same-side/1' @ V_vertices )
          & ( '3d.is-convex-shape-rec/1' @ ( '3d.polygon/1' @ V_vertices ) ) ) ) ) )).

thf('3d.def_center_of_arc_by_three_points_axiom',axiom,(
    ! [V_c: '3d.Point',V_p: '3d.Point',V_q: '3d.Point'] :
      ( ( '3d.center-of/1' @ ( '3d.arc/3' @ V_c @ V_p @ V_q ) )
      = V_c ) )).

thf('3d.def_center_of_major_arc_by_three_points_axiom',axiom,(
    ! [V_c: '3d.Point',V_p: '3d.Point',V_q: '3d.Point'] :
      ( ( '3d.center-of/1' @ ( '3d.major-arc/1' @ ( '3d.arc/3' @ V_c @ V_p @ V_q ) ) )
      = V_c ) )).

thf('3d.def_center_of_minor_arc_by_three_points_axiom',axiom,(
    ! [V_c: '3d.Point',V_p: '3d.Point',V_q: '3d.Point'] :
      ( ( '3d.center-of/1' @ ( '3d.minor-arc/1' @ ( '3d.arc/3' @ V_c @ V_p @ V_q ) ) )
      = V_c ) )).

thf('3d.def_arc_by_three_points_ini_point_axiom',axiom,(
    ! [V_c: '3d.Point',V_p: '3d.Point',V_q: '3d.Point'] :
      ( ( '3d.arc-ini-point/1' @ ( '3d.arc/3' @ V_c @ V_p @ V_q ) )
      = V_p ) )).

thf('3d.def_major_arc_by_three_points_ini_point_axiom',axiom,(
    ! [V_c: '3d.Point',V_p: '3d.Point',V_q: '3d.Point'] :
      ( ( '3d.arc-ini-point/1' @ ( '3d.major-arc/1' @ ( '3d.arc/3' @ V_c @ V_p @ V_q ) ) )
      = ( '3d.arc-ini-point/1' @ ( '3d.arc/3' @ V_c @ V_p @ V_q ) ) ) )).

thf('3d.def_minor_arc_by_three_points_ini_point_axiom',axiom,(
    ! [V_c: '3d.Point',V_p: '3d.Point',V_q: '3d.Point'] :
      ( ( '3d.arc-ini-point/1' @ ( '3d.minor-arc/1' @ ( '3d.arc/3' @ V_c @ V_p @ V_q ) ) )
      = ( '3d.arc-ini-point/1' @ ( '3d.arc/3' @ V_c @ V_p @ V_q ) ) ) )).

thf('3d.def_arc_by_three_points_end_point_axiom',axiom,(
    ! [V_c: '3d.Point',V_p: '3d.Point',V_q: '3d.Point'] :
      ( ( '3d.arc-end-point/1' @ ( '3d.arc/3' @ V_c @ V_p @ V_q ) )
      = V_q ) )).

thf('3d.def_major_arc_by_three_points_end_point_axiom',axiom,(
    ! [V_c: '3d.Point',V_p: '3d.Point',V_q: '3d.Point'] :
      ( ( '3d.arc-end-point/1' @ ( '3d.major-arc/1' @ ( '3d.arc/3' @ V_c @ V_p @ V_q ) ) )
      = ( '3d.arc-end-point/1' @ ( '3d.arc/3' @ V_c @ V_p @ V_q ) ) ) )).

thf('3d.def_minor_arc_by_three_points_end_point_axiom',axiom,(
    ! [V_c: '3d.Point',V_p: '3d.Point',V_q: '3d.Point'] :
      ( ( '3d.arc-end-point/1' @ ( '3d.minor-arc/1' @ ( '3d.arc/3' @ V_c @ V_p @ V_q ) ) )
      = ( '3d.arc-end-point/1' @ ( '3d.arc/3' @ V_c @ V_p @ V_q ) ) ) )).

thf('3d.def_major_arc_by_three_arc_central_angle_axiom',axiom,(
    ! [V_c: '3d.Point',V_p: '3d.Point',V_q: '3d.Point'] :
      ( ( '3d.arc-central-angle/1' @ ( '3d.major-arc/1' @ ( '3d.arc/3' @ V_c @ V_p @ V_q ) ) )
      = ( $difference @ ( $product @ 2.0 @ 'Pi/0' ) @ ( '3d.rad-of-angle/1' @ ( '3d.angle-of-vectors/2' @ ( '3d.vec/2' @ V_c @ V_p ) @ ( '3d.vec/2' @ V_c @ V_q ) ) ) ) ) )).

thf('3d.def_minor_arc_by_three_arc_central_angle_axiom',axiom,(
    ! [V_c: '3d.Point',V_p: '3d.Point',V_q: '3d.Point'] :
      ( ( '3d.arc-central-angle/1' @ ( '3d.minor-arc/1' @ ( '3d.arc/3' @ V_c @ V_p @ V_q ) ) )
      = ( '3d.rad-of-angle/1' @ ( '3d.angle-of-vectors/2' @ ( '3d.vec/2' @ V_c @ V_p ) @ ( '3d.vec/2' @ V_c @ V_q ) ) ) ) )).

thf('3d.def_arc_by_three_arc_central_angle_axiom',axiom,(
    ! [V_c: '3d.Point',V_p: '3d.Point',V_q: '3d.Point'] :
      ( ( '3d.arc-central-angle/1' @ ( '3d.arc/3' @ V_c @ V_p @ V_q ) )
      = ( '3d.arc-central-angle/1' @ ( '3d.minor-arc/1' @ ( '3d.arc/3' @ V_c @ V_p @ V_q ) ) ) ) )).

thf('3d.def_major_arc_by_three_points_equality_axiom',axiom,(
    ! [V_c1: '3d.Point',V_p1: '3d.Point',V_q1: '3d.Point',V_c2: '3d.Point',V_p2: '3d.Point',V_q2: '3d.Point'] :
      ( ( ( '3d.major-arc/1' @ ( '3d.arc/3' @ V_c1 @ V_p1 @ V_q1 ) )
        = ( '3d.major-arc/1' @ ( '3d.arc/3' @ V_c2 @ V_p2 @ V_q2 ) ) )
    <=> ( ( V_c1 = V_c2 )
        & ( V_p1 = V_p2 )
        & ( V_q1 = V_q2 ) ) ) )).

thf('3d.def_minor_arc_by_three_points_equality_axiom',axiom,(
    ! [V_c1: '3d.Point',V_p1: '3d.Point',V_q1: '3d.Point',V_c2: '3d.Point',V_p2: '3d.Point',V_q2: '3d.Point'] :
      ( ( ( '3d.minor-arc/1' @ ( '3d.arc/3' @ V_c1 @ V_p1 @ V_q1 ) )
        = ( '3d.minor-arc/1' @ ( '3d.arc/3' @ V_c2 @ V_p2 @ V_q2 ) ) )
    <=> ( ( V_c1 = V_c2 )
        & ( V_p1 = V_p2 )
        & ( V_q1 = V_q2 ) ) ) )).

thf('3d.def_arc_by_three_points_equality1_axiom',axiom,(
    ! [V_c1: '3d.Point',V_p1: '3d.Point',V_q1: '3d.Point',V_shape: '3d.Shape'] :
      ( ( V_shape
        = ( '3d.arc/3' @ V_c1 @ V_p1 @ V_q1 ) )
    <=> ( ( '3d.minor-arc/1' @ ( '3d.arc/3' @ V_c1 @ V_p1 @ V_q1 ) )
        = V_shape ) ) )).

thf('3d.def_arc_by_three_points_equality2_axiom',axiom,(
    ! [V_c1: '3d.Point',V_p1: '3d.Point',V_q1: '3d.Point',V_shape: '3d.Shape'] :
      ( ( ( '3d.arc/3' @ V_c1 @ V_p1 @ V_q1 )
        = V_shape )
    <=> ( V_shape
        = ( '3d.minor-arc/1' @ ( '3d.arc/3' @ V_c1 @ V_p1 @ V_q1 ) ) ) ) )).

thf('3d.def_major_minor_arc_by_three_points_equality_axiom',axiom,(
    ! [V_c1: '3d.Point',V_p1: '3d.Point',V_q1: '3d.Point',V_c2: '3d.Point',V_p2: '3d.Point',V_q2: '3d.Point'] :
      ( ( ( '3d.major-arc/1' @ ( '3d.arc/3' @ V_c1 @ V_p1 @ V_q1 ) )
        = ( '3d.minor-arc/1' @ ( '3d.arc/3' @ V_c2 @ V_p2 @ V_q2 ) ) )
    <=> $false ) )).

thf('3d.def_minor_major_arc_by_three_points_equality_axiom',axiom,(
    ! [V_c1: '3d.Point',V_p1: '3d.Point',V_q1: '3d.Point',V_c2: '3d.Point',V_p2: '3d.Point',V_q2: '3d.Point'] :
      ( ( ( '3d.minor-arc/1' @ ( '3d.arc/3' @ V_c1 @ V_p1 @ V_q1 ) )
        = ( '3d.major-arc/1' @ ( '3d.arc/3' @ V_c2 @ V_p2 @ V_q2 ) ) )
    <=> ( ( '3d.major-arc/1' @ ( '3d.arc/3' @ V_c1 @ V_p1 @ V_q1 ) )
        = ( '3d.minor-arc/1' @ ( '3d.arc/3' @ V_c2 @ V_p2 @ V_q2 ) ) ) ) )).

thf('3d.def_radius_of_arc_by_three_points_axiom',axiom,(
    ! [V_c: '3d.Point',V_p: '3d.Point',V_q: '3d.Point'] :
      ( ( '3d.radius-of/1' @ ( '3d.arc/3' @ V_c @ V_p @ V_q ) )
      = ( '3d.radius-of/1' @ ( '3d.arc-shape/1' @ ( '3d.arc/3' @ V_c @ V_p @ V_q ) ) ) ) )).

thf('3d.def_radius_of_major_arc_by_three_points_axiom',axiom,(
    ! [V_c: '3d.Point',V_p: '3d.Point',V_q: '3d.Point'] :
      ( ( '3d.radius-of/1' @ ( '3d.major-arc/1' @ ( '3d.arc/3' @ V_c @ V_p @ V_q ) ) )
      = ( '3d.radius-of/1' @ ( '3d.arc-shape/1' @ ( '3d.major-arc/1' @ ( '3d.arc/3' @ V_c @ V_p @ V_q ) ) ) ) ) )).

thf('3d.def_radius_of_minor_arc_by_three_points_axiom',axiom,(
    ! [V_c: '3d.Point',V_p: '3d.Point',V_q: '3d.Point'] :
      ( ( '3d.radius-of/1' @ ( '3d.minor-arc/1' @ ( '3d.arc/3' @ V_c @ V_p @ V_q ) ) )
      = ( '3d.radius-of/1' @ ( '3d.arc-shape/1' @ ( '3d.minor-arc/1' @ ( '3d.arc/3' @ V_c @ V_p @ V_q ) ) ) ) ) )).

thf('3d.def_length_of_arc_by_three_points_axiom',axiom,(
    ! [V_c: '3d.Point',V_p: '3d.Point',V_q: '3d.Point'] :
      ( ( '3d.length-of/1' @ ( '3d.arc/3' @ V_c @ V_p @ V_q ) )
      = ( '3d.length-of/1' @ ( '3d.arc-shape/1' @ ( '3d.arc/3' @ V_c @ V_p @ V_q ) ) ) ) )).

thf('3d.def_length_of_major_arc_by_three_points_axiom',axiom,(
    ! [V_c: '3d.Point',V_p: '3d.Point',V_q: '3d.Point'] :
      ( ( '3d.length-of/1' @ ( '3d.major-arc/1' @ ( '3d.arc/3' @ V_c @ V_p @ V_q ) ) )
      = ( '3d.length-of/1' @ ( '3d.arc-shape/1' @ ( '3d.major-arc/1' @ ( '3d.arc/3' @ V_c @ V_p @ V_q ) ) ) ) ) )).

thf('3d.def_length_of_minor_arc_by_three_points_axiom',axiom,(
    ! [V_c: '3d.Point',V_p: '3d.Point',V_q: '3d.Point'] :
      ( ( '3d.length-of/1' @ ( '3d.minor-arc/1' @ ( '3d.arc/3' @ V_c @ V_p @ V_q ) ) )
      = ( '3d.length-of/1' @ ( '3d.arc-shape/1' @ ( '3d.minor-arc/1' @ ( '3d.arc/3' @ V_c @ V_p @ V_q ) ) ) ) ) )).

thf('3d.def_area_of_arc_by_three_points_axiom',axiom,(
    ! [V_c: '3d.Point',V_p: '3d.Point',V_q: '3d.Point'] :
      ( ( '3d.area-of/1' @ ( '3d.arc/3' @ V_c @ V_p @ V_q ) )
      = ( '3d.area-of/1' @ ( '3d.arc-shape/1' @ ( '3d.arc/3' @ V_c @ V_p @ V_q ) ) ) ) )).

thf('3d.def_area_of_major_arc_by_three_points_axiom',axiom,(
    ! [V_c: '3d.Point',V_p: '3d.Point',V_q: '3d.Point'] :
      ( ( '3d.area-of/1' @ ( '3d.major-arc/1' @ ( '3d.arc/3' @ V_c @ V_p @ V_q ) ) )
      = ( '3d.area-of/1' @ ( '3d.arc-shape/1' @ ( '3d.major-arc/1' @ ( '3d.arc/3' @ V_c @ V_p @ V_q ) ) ) ) ) )).

thf('3d.def_area_of_minor_arc_by_three_points_axiom',axiom,(
    ! [V_c: '3d.Point',V_p: '3d.Point',V_q: '3d.Point'] :
      ( ( '3d.area-of/1' @ ( '3d.minor-arc/1' @ ( '3d.arc/3' @ V_c @ V_p @ V_q ) ) )
      = ( '3d.area-of/1' @ ( '3d.arc-shape/1' @ ( '3d.minor-arc/1' @ ( '3d.arc/3' @ V_c @ V_p @ V_q ) ) ) ) ) )).

thf('3d.def_radius_of_arc_shape_axiom',axiom,(
    ! [V_arc: '3d.Shape'] :
      ( ( '3d.radius-of/1' @ ( '3d.arc-shape/1' @ V_arc ) )
      = ( '3d.distance/2' @ ( '3d.center-of/1' @ V_arc ) @ ( '3d.arc-ini-point/1' @ V_arc ) ) ) )).

thf('3d.def_length_of_arc_shape_axiom',axiom,(
    ! [V_arc: '3d.Shape'] :
      ( ( '3d.length-of/1' @ ( '3d.arc-shape/1' @ V_arc ) )
      = ( $product @ ( '3d.radius-of/1' @ V_arc ) @ ( '3d.arc-central-angle/1' @ V_arc ) ) ) )).

thf('3d.def_area_of_arc_shape_axiom',axiom,(
    ! [V_arc: '3d.Shape'] :
      ( ( '3d.area-of/1' @ ( '3d.arc-shape/1' @ V_arc ) )
      = ( $product @ ( '^/2' @ ( '3d.radius-of/1' @ V_arc ) @ 2.0 ) @ ( $quotient @ ( '3d.arc-central-angle/1' @ V_arc ) @ 2.0 ) ) ) )).

thf('3d.def_is_arc_node_axiom',axiom,(
    ! [V_p: '3d.Point',V_A: '3d.Shape'] :
      ( ( '3d.is-arc-node/2' @ V_p @ V_A )
    <=> ( ( V_p
          = ( '3d.arc-ini-point/1' @ V_A ) )
        | ( V_p
          = ( '3d.arc-end-point/1' @ V_A ) ) ) ) )).

thf('3d.def_chord_of_arc_axiom',axiom,(
    ! [V_x: '3d.Shape'] :
      ( ( '3d.chord-of-arc/1' @ V_x )
      = ( '3d.seg/2' @ ( '3d.arc-ini-point/1' @ V_x ) @ ( '3d.arc-end-point/1' @ V_x ) ) ) )).

thf('3d.def_arc_inscribed_angle_axiom',axiom,(
    ! [V_x: '3d.Shape'] :
      ( ( '3d.arc-inscribed-angle/1' @ V_x )
      = ( $quotient @ ( '3d.arc-central-angle/1' @ V_x ) @ 2.0 ) ) )).

thf('3d.def_is_circular_sector_node_axiom',axiom,(
    ! [V_p: '3d.Point',V_A: '3d.Shape'] :
      ( ( '3d.is-circular-sector-node/2' @ V_p @ V_A )
    <=> ( ( V_p
          = ( '3d.circular-sector-ini-point/1' @ V_A ) )
        | ( V_p
          = ( '3d.circular-sector-end-point/1' @ V_A ) ) ) ) )).

thf('3d.def_chord_of_circular_sector_axiom',axiom,(
    ! [V_x: '3d.Shape'] :
      ( ( '3d.chord-of-circular-sector/1' @ V_x )
      = ( '3d.seg/2' @ ( '3d.circular-sector-ini-point/1' @ V_x ) @ ( '3d.circular-sector-end-point/1' @ V_x ) ) ) )).

thf('3d.def_circular_sector_inscribed_angle_axiom',axiom,(
    ! [V_x: '3d.Shape'] :
      ( ( '3d.circular-sector-inscribed-angle/1' @ V_x )
      = ( $quotient @ ( '3d.circular-sector-central-angle/1' @ V_x ) @ 2.0 ) ) )).

thf('3d.def_sides_of_circular_sector_axiom',axiom,(
    ! [V_s: '3d.Shape'] :
      ( ( '3d.sides-of/1' @ ( '3d.circular-sector-shape/1' @ V_s ) )
      = ( 'cons/2' @ '3d.Shape' @ ( '3d.arc-of/1' @ V_s ) @ ( 'cons/2' @ '3d.Shape' @ ( '3d.seg/2' @ ( '3d.center-of/1' @ V_s ) @ ( '3d.circular-sector-ini-point/1' @ V_s ) ) @ ( 'cons/2' @ '3d.Shape' @ ( '3d.seg/2' @ ( '3d.center-of/1' @ V_s ) @ ( '3d.circular-sector-end-point/1' @ V_s ) ) @ ( 'nil/0' @ '3d.Shape' ) ) ) ) ) )).

thf('3d.def_is_empty_axiom',axiom,(
    ! [V_shape: '3d.Shape'] :
      ( ( '3d.is-empty/1' @ V_shape )
    <=> ! [V_p: '3d.Point'] :
          ~ ( '3d.on/2' @ V_p @ V_shape ) ) )).

thf('3d.def_complement_axiom',axiom,(
    ! [V_shape: '3d.Shape'] :
      ( ( '3d.complement/1' @ V_shape )
      = ( '3d.shape-of-cpfun/1'
        @ ^ [V_p: '3d.Point'] :
            ~ ( '3d.on/2' @ V_p @ V_shape ) ) ) )).

thf('3d.def_shape-_axiom',axiom,(
    ! [V_A: '3d.Shape',V_B: '3d.Shape'] :
      ( ( '3d.shape-/2' @ V_A @ V_B )
      = ( '3d.intersection/2' @ V_A @ ( '3d.complement/1' @ V_B ) ) ) )).

thf('3d.def_set_as_shape_axiom',axiom,(
    ! [V_cfun: ( '3d.Point' > $o )] :
      ( ( '3d.set-as-shape/1' @ ( 'set-by-def/1' @ '3d.Point' @ V_cfun ) )
      = ( '3d.shape-of-cpfun/1'
        @ ^ [V_p: '3d.Point'] :
            ( V_cfun @ V_p ) ) ) )).

thf('3d.def_shape_as_set_axiom',axiom,(
    ! [V_shape: '3d.Shape'] :
      ( ( '3d.shape-as-set/1' @ V_shape )
      = ( 'set-by-def/1' @ '3d.Point'
        @ ^ [V_p: '3d.Point'] :
            ( '3d.on/2' @ V_p @ V_shape ) ) ) )).

thf('3d.shape-common-operation/1_type',type,(
    '3d.shape-common-operation/1': '3d.Shape' > '3d.Shape' )).

thf('3d.def_point_on_common_shape_axiom',axiom,(
    ! [V_p: '3d.Point',V_shape: '3d.Shape'] :
      ( ( '3d.on/2' @ V_p @ ( '3d.shape-common-operation/1' @ V_shape ) )
    <=> ( '3d.char-fun-of/1' @ V_shape @ V_p ) ) )).

thf('3d.def_point_on_inner_part_of_axiom',axiom,(
    ! [V_p: '3d.Point',V_shape: '3d.Shape'] :
      ( ( '3d.on/2' @ V_p @ ( '3d.inner-part-of/1' @ V_shape ) )
    <=> ( '3d.on/2' @ V_p @ ( '3d.shape-common-operation/1' @ ( '3d.inner-part-of/1' @ V_shape ) ) ) ) )).

thf('3d.def_point_on_with_boundary_axiom',axiom,(
    ! [V_p: '3d.Point',V_shape: '3d.Shape'] :
      ( ( '3d.on/2' @ V_p @ ( '3d.with-boundary/1' @ V_shape ) )
    <=> ( '3d.on/2' @ V_p @ ( '3d.shape-common-operation/1' @ ( '3d.with-boundary/1' @ V_shape ) ) ) ) )).

thf('3d.def_point_on_boundary_of_axiom',axiom,(
    ! [V_p: '3d.Point',V_shape: '3d.Shape'] :
      ( ( '3d.on/2' @ V_p @ ( '3d.boundary-of/1' @ V_shape ) )
    <=> ( '3d.on/2' @ V_p @ ( '3d.shape-common-operation/1' @ ( '3d.boundary-of/1' @ V_shape ) ) ) ) )).

thf('3d.def_point_on_segment_axiom',axiom,(
    ! [V_b: '3d.Point',V_a: '3d.Point',V_p: '3d.Point'] :
      ( ( '3d.segment-type/1' @ ( '3d.seg/2' @ V_a @ V_b ) )
     => ( ( '3d.on/2' @ V_p @ ( '3d.seg/2' @ V_a @ V_b ) )
      <=> ( '3d.on/2' @ V_p @ ( '3d.shape-common-operation/1' @ ( '3d.seg/2' @ V_a @ V_b ) ) ) ) ) )).

thf('3d.def_point_on_line_axiom',axiom,(
    ! [V_b: '3d.Point',V_a: '3d.Point',V_p: '3d.Point'] :
      ( ( '3d.line-type/1' @ ( '3d.line/2' @ V_a @ V_b ) )
     => ( ( '3d.on/2' @ V_p @ ( '3d.line/2' @ V_a @ V_b ) )
      <=> ( '3d.colinear/3' @ V_p @ V_a @ V_b ) ) ) )).

thf('3d.def_point_on_half_line_axiom',axiom,(
    ! [V_R: '3d.Point',V_Q: '3d.Point',V_P: '3d.Point'] :
      ( ( '3d.half-line-type/1' @ ( '3d.half-line/2' @ V_Q @ V_R ) )
     => ( ( '3d.on/2' @ V_P @ ( '3d.half-line/2' @ V_Q @ V_R ) )
      <=> ( '3d.on/2' @ V_P @ ( '3d.shape-common-operation/1' @ ( '3d.half-line/2' @ V_Q @ V_R ) ) ) ) ) )).

thf('3d.def_point_on_triangle_axiom',axiom,(
    ! [V_R: '3d.Point',V_Q: '3d.Point',V_P: '3d.Point',V_p: '3d.Point'] :
      ( ( '3d.triangle-type/1' @ ( '3d.triangle/3' @ V_P @ V_Q @ V_R ) )
     => ( ( '3d.on/2' @ V_p @ ( '3d.triangle/3' @ V_P @ V_Q @ V_R ) )
      <=> ( '3d.on/2' @ V_p @ ( '3d.shape-common-operation/1' @ ( '3d.triangle/3' @ V_P @ V_Q @ V_R ) ) ) ) ) )).

thf('3d.def_point_on_square_axiom',axiom,(
    ! [V_S: '3d.Point',V_R: '3d.Point',V_Q: '3d.Point',V_P: '3d.Point',V_p: '3d.Point'] :
      ( ( '3d.square-type/1' @ ( '3d.square/4' @ V_P @ V_Q @ V_R @ V_S ) )
     => ( ( '3d.on/2' @ V_p @ ( '3d.square/4' @ V_P @ V_Q @ V_R @ V_S ) )
      <=> ( '3d.on/2' @ V_p @ ( '3d.shape-common-operation/1' @ ( '3d.square/4' @ V_P @ V_Q @ V_R @ V_S ) ) ) ) ) )).

thf('3d.def_point_on_polygon_axiom',axiom,(
    ! [V_vertices: ( 'ListOf' @ '3d.Point' ),V_p: '3d.Point'] :
      ( ( '3d.polygon-type/1' @ ( '3d.polygon/1' @ V_vertices ) )
     => ( ( '3d.on/2' @ V_p @ ( '3d.polygon/1' @ V_vertices ) )
      <=> ( '3d.on/2' @ V_p @ ( '3d.shape-common-operation/1' @ ( '3d.polygon/1' @ V_vertices ) ) ) ) ) )).

thf('3d.def_point_on_circle_axiom',axiom,(
    ! [V_p: '3d.Point',V_s: '3d.Shape'] :
      ( ( '3d.on/2' @ V_p @ ( '3d.circle-shape/1' @ V_s ) )
    <=> ( '3d.on/2' @ V_p @ ( '3d.shape-common-operation/1' @ ( '3d.circle-shape/1' @ V_s ) ) ) ) )).

thf('3d.def_point_on_disk_axiom',axiom,(
    ! [V_p: '3d.Point',V_s: '3d.Shape'] :
      ( ( '3d.on/2' @ V_p @ ( '3d.disk-shape/1' @ V_s ) )
    <=> ( '3d.on/2' @ V_p @ ( '3d.shape-common-operation/1' @ ( '3d.disk-shape/1' @ V_s ) ) ) ) )).

thf('3d.def_point_on_arc_shape_axiom',axiom,(
    ! [V_p: '3d.Point',V_s: '3d.Shape'] :
      ( ( '3d.on/2' @ V_p @ ( '3d.arc-shape/1' @ V_s ) )
    <=> ( '3d.on/2' @ V_p @ ( '3d.shape-common-operation/1' @ ( '3d.arc-shape/1' @ V_s ) ) ) ) )).

thf('3d.def_point_on_arc_by_three_points_axiom',axiom,(
    ! [V_p: '3d.Point',V_c: '3d.Point',V_a: '3d.Point',V_b: '3d.Point'] :
      ( ( '3d.on/2' @ V_p @ ( '3d.arc/3' @ V_c @ V_a @ V_b ) )
    <=> ( '3d.on/2' @ V_p @ ( '3d.arc-shape/1' @ ( '3d.arc/3' @ V_c @ V_a @ V_b ) ) ) ) )).

thf('3d.def_point_on_major_arc_by_three_points_axiom',axiom,(
    ! [V_p: '3d.Point',V_c: '3d.Point',V_a: '3d.Point',V_b: '3d.Point'] :
      ( ( '3d.on/2' @ V_p @ ( '3d.major-arc/1' @ ( '3d.arc/3' @ V_c @ V_a @ V_b ) ) )
    <=> ( '3d.on/2' @ V_p @ ( '3d.arc-shape/1' @ ( '3d.major-arc/1' @ ( '3d.arc/3' @ V_c @ V_a @ V_b ) ) ) ) ) )).

thf('3d.def_point_on_minor_arc_by_three_points_axiom',axiom,(
    ! [V_p: '3d.Point',V_c: '3d.Point',V_a: '3d.Point',V_b: '3d.Point'] :
      ( ( '3d.on/2' @ V_p @ ( '3d.minor-arc/1' @ ( '3d.arc/3' @ V_c @ V_a @ V_b ) ) )
    <=> ( '3d.on/2' @ V_p @ ( '3d.arc-shape/1' @ ( '3d.minor-arc/1' @ ( '3d.arc/3' @ V_c @ V_a @ V_b ) ) ) ) ) )).

thf('3d.def_point_on_circular_sector_axiom',axiom,(
    ! [V_p: '3d.Point',V_s: '3d.Shape'] :
      ( ( '3d.on/2' @ V_p @ ( '3d.circular-sector-shape/1' @ V_s ) )
    <=> ( '3d.on/2' @ V_p @ ( '3d.shape-common-operation/1' @ ( '3d.circular-sector-shape/1' @ V_s ) ) ) ) )).

thf('3d.def_on_divided_by_line_region_including_axiom',axiom,(
    ! [V_point: '3d.Point',V_q: '3d.Point',V_p: '3d.Point',V_P: '3d.Point'] :
      ( ( '3d.line-type/1' @ ( '3d.line/2' @ V_p @ V_q ) )
     => ( ( '3d.on/2' @ V_P @ ( '3d.divided-region-including/2' @ ( '3d.line/2' @ V_p @ V_q ) @ V_point ) )
      <=> ( '3d.on/2' @ V_P @ ( '3d.shape-common-operation/1' @ ( '3d.divided-region-including/2' @ ( '3d.line/2' @ V_p @ V_q ) @ V_point ) ) ) ) ) )).

thf('3d.def_on_shape_axiom',axiom,(
    ! [V_point: '3d.Point',V_cfun: ( '3d.Point' > $o )] :
      ( ( '3d.on/2' @ V_point @ ( '3d.shape-of-cpfun/1' @ V_cfun ) )
    <=> ( V_cfun @ V_point ) ) )).

thf('3d.def_point_inside_of_common_shape_axiom',axiom,(
    ! [V_p: '3d.Point',V_shape: '3d.Shape'] :
      ( ( '3d.point-inside-of/2' @ V_p @ ( '3d.shape-common-operation/1' @ V_shape ) )
    <=> ( '3d.on/2' @ V_p @ ( '3d.inner-part-of/1' @ V_shape ) ) ) )).

thf('3d.def_point_inside_of_triangle_axiom',axiom,(
    ! [V_R: '3d.Point',V_Q: '3d.Point',V_P: '3d.Point',V_p: '3d.Point'] :
      ( ( '3d.triangle-type/1' @ ( '3d.triangle/3' @ V_P @ V_Q @ V_R ) )
     => ( ( '3d.point-inside-of/2' @ V_p @ ( '3d.triangle/3' @ V_P @ V_Q @ V_R ) )
      <=> ( '3d.point-inside-of/2' @ V_p @ ( '3d.shape-common-operation/1' @ ( '3d.triangle/3' @ V_P @ V_Q @ V_R ) ) ) ) ) )).

thf('3d.def_point_inside_of_square_axiom',axiom,(
    ! [V_D: '3d.Point',V_C: '3d.Point',V_B: '3d.Point',V_A: '3d.Point',V_p: '3d.Point'] :
      ( ( '3d.square-type/1' @ ( '3d.square/4' @ V_A @ V_B @ V_C @ V_D ) )
     => ( ( '3d.point-inside-of/2' @ V_p @ ( '3d.square/4' @ V_A @ V_B @ V_C @ V_D ) )
      <=> ( '3d.point-inside-of/2' @ V_p @ ( '3d.shape-common-operation/1' @ ( '3d.square/4' @ V_A @ V_B @ V_C @ V_D ) ) ) ) ) )).

thf('3d.def_point_inside_of_polygon_axiom',axiom,(
    ! [V_vertices: ( 'ListOf' @ '3d.Point' ),V_p: '3d.Point'] :
      ( ( '3d.polygon-type/1' @ ( '3d.polygon/1' @ V_vertices ) )
     => ( ( '3d.point-inside-of/2' @ V_p @ ( '3d.polygon/1' @ V_vertices ) )
      <=> ( '3d.point-inside-of/2' @ V_p @ ( '3d.shape-common-operation/1' @ ( '3d.polygon/1' @ V_vertices ) ) ) ) ) )).

thf('3d.def_point_inside_of_divided_by_line_region_including_axiom',axiom,(
    ! [V_point: '3d.Point',V_q: '3d.Point',V_p: '3d.Point',V_P: '3d.Point'] :
      ( ( '3d.line-type/1' @ ( '3d.line/2' @ V_p @ V_q ) )
     => ( ( '3d.point-inside-of/2' @ V_P @ ( '3d.divided-region-including/2' @ ( '3d.line/2' @ V_p @ V_q ) @ V_point ) )
      <=> ( '3d.point-inside-of/2' @ V_P @ ( '3d.shape-common-operation/1' @ ( '3d.divided-region-including/2' @ ( '3d.line/2' @ V_p @ V_q ) @ V_point ) ) ) ) ) )).

thf('3d.def_point_inside_of_circle_axiom',axiom,(
    ! [V_p: '3d.Point',V_s: '3d.Shape'] :
      ( ( '3d.point-inside-of/2' @ V_p @ ( '3d.circle-shape/1' @ V_s ) )
    <=> ( '3d.point-inside-of/2' @ V_p @ ( '3d.shape-common-operation/1' @ ( '3d.circle-shape/1' @ V_s ) ) ) ) )).

thf('3d.def_point_inside_of_disk_axiom',axiom,(
    ! [V_p: '3d.Point',V_s: '3d.Shape'] :
      ( ( '3d.point-inside-of/2' @ V_p @ ( '3d.disk-shape/1' @ V_s ) )
    <=> ( '3d.point-inside-of/2' @ V_p @ ( '3d.shape-common-operation/1' @ ( '3d.disk-shape/1' @ V_s ) ) ) ) )).

thf('3d.def_point_inside_of_arc_axiom',axiom,(
    ! [V_p: '3d.Point',V_s: '3d.Shape'] :
      ( ( '3d.point-inside-of/2' @ V_p @ ( '3d.arc-shape/1' @ V_s ) )
    <=> ( '3d.point-inside-of/2' @ V_p @ ( '3d.shape-common-operation/1' @ ( '3d.arc-shape/1' @ V_s ) ) ) ) )).

thf('3d.def_point_inside_of_arc_by_three_points_axiom',axiom,(
    ! [V_p: '3d.Point',V_c: '3d.Point',V_a: '3d.Point',V_b: '3d.Point'] :
      ( ( '3d.point-inside-of/2' @ V_p @ ( '3d.arc/3' @ V_c @ V_a @ V_b ) )
    <=> ( '3d.point-inside-of/2' @ V_p @ ( '3d.arc-shape/1' @ ( '3d.arc/3' @ V_c @ V_a @ V_b ) ) ) ) )).

thf('3d.def_point_inside_of_major_arc_by_three_points_axiom',axiom,(
    ! [V_p: '3d.Point',V_c: '3d.Point',V_a: '3d.Point',V_b: '3d.Point'] :
      ( ( '3d.point-inside-of/2' @ V_p @ ( '3d.major-arc/1' @ ( '3d.arc/3' @ V_c @ V_a @ V_b ) ) )
    <=> ( '3d.point-inside-of/2' @ V_p @ ( '3d.arc-shape/1' @ ( '3d.major-arc/1' @ ( '3d.arc/3' @ V_c @ V_a @ V_b ) ) ) ) ) )).

thf('3d.def_point_inside_of_minor_arc_by_three_points_axiom',axiom,(
    ! [V_p: '3d.Point',V_c: '3d.Point',V_a: '3d.Point',V_b: '3d.Point'] :
      ( ( '3d.point-inside-of/2' @ V_p @ ( '3d.minor-arc/1' @ ( '3d.arc/3' @ V_c @ V_a @ V_b ) ) )
    <=> ( '3d.point-inside-of/2' @ V_p @ ( '3d.arc-shape/1' @ ( '3d.minor-arc/1' @ ( '3d.arc/3' @ V_c @ V_a @ V_b ) ) ) ) ) )).

thf('3d.def_point_inside_of_circular_sector_axiom',axiom,(
    ! [V_p: '3d.Point',V_s: '3d.Shape'] :
      ( ( '3d.point-inside-of/2' @ V_p @ ( '3d.circular-sector-shape/1' @ V_s ) )
    <=> ( '3d.point-inside-of/2' @ V_p @ ( '3d.shape-common-operation/1' @ ( '3d.circular-sector-shape/1' @ V_s ) ) ) ) )).

thf('3d.def_point_on_intersection_axiom',axiom,(
    ! [V_P: '3d.Point',V_S0: '3d.Shape',V_S1: '3d.Shape'] :
      ( ( '3d.on/2' @ V_P @ ( '3d.intersection/2' @ V_S0 @ V_S1 ) )
    <=> ( ( '3d.on/2' @ V_P @ V_S0 )
        & ( '3d.on/2' @ V_P @ V_S1 ) ) ) )).

thf('3d.def_point_on_intersection_list_axiom',axiom,(
    ! [V_P: '3d.Point',V_Ss: ( 'ListOf' @ '3d.Shape' )] :
      ( ( '3d.on/2' @ V_P @ ( '3d.intersection/1' @ V_Ss ) )
    <=> ( 'all/2' @ '3d.Shape'
        @ ^ [V_s: '3d.Shape'] :
            ( '3d.on/2' @ V_P @ V_s )
        @ V_Ss ) ) )).

thf('3d.def_point_on_union_axiom',axiom,(
    ! [V_P: '3d.Point',V_S0: '3d.Shape',V_S1: '3d.Shape'] :
      ( ( '3d.on/2' @ V_P @ ( '3d.union/2' @ V_S0 @ V_S1 ) )
    <=> ( ( '3d.on/2' @ V_P @ V_S0 )
        | ( '3d.on/2' @ V_P @ V_S1 ) ) ) )).

thf('3d.def_point_on_union_list_axiom',axiom,(
    ! [V_P: '3d.Point',V_Ss: ( 'ListOf' @ '3d.Shape' )] :
      ( ( '3d.on/2' @ V_P @ ( '3d.union/1' @ V_Ss ) )
    <=> ( 'some/2' @ '3d.Shape'
        @ ^ [V_s: '3d.Shape'] :
            ( '3d.on/2' @ V_P @ V_s )
        @ V_Ss ) ) )).

thf('3d.def_seg_equality_axiom',axiom,(
    ! [V_s: '3d.Point',V_r: '3d.Point',V_q: '3d.Point',V_p: '3d.Point'] :
      ( ( ( '3d.segment-type/1' @ ( '3d.seg/2' @ V_p @ V_q ) )
        & ( '3d.segment-type/1' @ ( '3d.seg/2' @ V_r @ V_s ) ) )
     => ( ( ( '3d.seg/2' @ V_p @ V_q )
          = ( '3d.seg/2' @ V_r @ V_s ) )
      <=> ( ( ( V_p = V_r )
            & ( V_q = V_s ) )
          | ( ( V_p = V_s )
            & ( V_q = V_r ) ) ) ) ) )).

thf('3d.def_line_equality_axiom',axiom,(
    ! [V_s: '3d.Point',V_r: '3d.Point',V_q: '3d.Point',V_p: '3d.Point'] :
      ( ( ( '3d.line-type/1' @ ( '3d.line/2' @ V_p @ V_q ) )
        & ( '3d.line-type/1' @ ( '3d.line/2' @ V_r @ V_s ) ) )
     => ( ( ( '3d.line/2' @ V_p @ V_q )
          = ( '3d.line/2' @ V_r @ V_s ) )
      <=> ( ( '3d.colinear/3' @ V_p @ V_q @ V_r )
          & ( '3d.colinear/3' @ V_p @ V_q @ V_s ) ) ) ) )).

thf('3d.def_half_line_equality_axiom',axiom,(
    ! [V_s: '3d.Point',V_r: '3d.Point',V_q: '3d.Point',V_p: '3d.Point'] :
      ( ( ( '3d.half-line-type/1' @ ( '3d.half-line/2' @ V_p @ V_q ) )
        & ( '3d.half-line-type/1' @ ( '3d.half-line/2' @ V_r @ V_s ) ) )
     => ( ( ( '3d.half-line/2' @ V_p @ V_q )
          = ( '3d.half-line/2' @ V_r @ V_s ) )
      <=> ( ( V_p = V_r )
          & ( '3d.colinear/3' @ V_p @ V_q @ V_r )
          & ( '3d.colinear/3' @ V_p @ V_q @ V_s ) ) ) ) )).

thf('3d.def_square_equality_axiom',axiom,(
    ! [V_S1: '3d.Point',V_R1: '3d.Point',V_Q1: '3d.Point',V_P1: '3d.Point',V_S0: '3d.Point',V_R0: '3d.Point',V_Q0: '3d.Point',V_P0: '3d.Point'] :
      ( ( ( '3d.square-type/1' @ ( '3d.square/4' @ V_P0 @ V_Q0 @ V_R0 @ V_S0 ) )
        & ( '3d.square-type/1' @ ( '3d.square/4' @ V_P1 @ V_Q1 @ V_R1 @ V_S1 ) ) )
     => ( ( ( '3d.square/4' @ V_P0 @ V_Q0 @ V_R0 @ V_S0 )
          = ( '3d.square/4' @ V_P1 @ V_Q1 @ V_R1 @ V_S1 ) )
      <=> ( ( V_P0 = V_P1 )
          & ( V_Q0 = V_Q1 )
          & ( V_R0 = V_R1 )
          & ( V_S0 = V_S1 ) ) ) ) )).

thf('3d.def_shape_enclosed_by_eq_something_axiom',axiom,(
    ! [V_boundaries: ( 'ListOf' @ '3d.Shape' ),V_S: '3d.Shape'] :
      ( ( ( '3d.shape-enclosed-by/1' @ V_boundaries )
        = V_S )
    <=> ( ( '3d.shape-of-cpfun/1' @ ( '3d.char-fun-of/1' @ ( '3d.shape-enclosed-by/1' @ V_boundaries ) ) )
        = V_S ) ) )).

thf('3d.def_polygon_equality_axiom',axiom,(
    ! [V_vertices2: ( 'ListOf' @ '3d.Point' ),V_vertices1: ( 'ListOf' @ '3d.Point' )] :
      ( ( ( '3d.polygon-type/1' @ ( '3d.polygon/1' @ V_vertices1 ) )
        & ( '3d.polygon-type/1' @ ( '3d.polygon/1' @ V_vertices2 ) ) )
     => ( ( ( '3d.polygon/1' @ V_vertices1 )
          = ( '3d.polygon/1' @ V_vertices2 ) )
      <=> ( V_vertices1 = V_vertices2 ) ) ) )).

thf('3d.def_area_of_square_axiom',axiom,(
    ! [V_s: '3d.Point',V_r: '3d.Point',V_q: '3d.Point',V_p: '3d.Point'] :
      ( ( '3d.square-type/1' @ ( '3d.square/4' @ V_p @ V_q @ V_r @ V_s ) )
     => ( ( '3d.area-of/1' @ ( '3d.square/4' @ V_p @ V_q @ V_r @ V_s ) )
        = ( $sum @ ( '3d.area-of/1' @ ( '3d.triangle/3' @ V_p @ V_q @ V_r ) ) @ ( '3d.area-of/1' @ ( '3d.triangle/3' @ V_p @ V_r @ V_s ) ) ) ) ) )).

thf('3d.def_area_of_polygon_base_case_axiom',axiom,(
    ! [V_p2: '3d.Point',V_p1: '3d.Point',V_p0: '3d.Point'] :
      ( ( '3d.polygon-type/1' @ ( '3d.polygon/1' @ ( 'cons/2' @ '3d.Point' @ V_p0 @ ( 'cons/2' @ '3d.Point' @ V_p1 @ ( 'cons/2' @ '3d.Point' @ V_p2 @ ( 'nil/0' @ '3d.Point' ) ) ) ) ) )
     => ( ( '3d.area-of/1' @ ( '3d.polygon/1' @ ( 'cons/2' @ '3d.Point' @ V_p0 @ ( 'cons/2' @ '3d.Point' @ V_p1 @ ( 'cons/2' @ '3d.Point' @ V_p2 @ ( 'nil/0' @ '3d.Point' ) ) ) ) ) )
        = ( '3d.area-of/1' @ ( '3d.triangle/3' @ V_p0 @ V_p1 @ V_p2 ) ) ) ) )).

thf('3d.def_area_of_polygon_axiom',axiom,(
    ! [V_ps: ( 'ListOf' @ '3d.Point' ),V_p3: '3d.Point',V_p2: '3d.Point',V_p1: '3d.Point',V_p0: '3d.Point'] :
      ( ( '3d.polygon-type/1' @ ( '3d.polygon/1' @ ( 'cons/2' @ '3d.Point' @ V_p0 @ ( 'cons/2' @ '3d.Point' @ V_p1 @ ( 'cons/2' @ '3d.Point' @ V_p2 @ ( 'cons/2' @ '3d.Point' @ V_p3 @ V_ps ) ) ) ) ) )
     => ( ( '3d.area-of/1' @ ( '3d.polygon/1' @ ( 'cons/2' @ '3d.Point' @ V_p0 @ ( 'cons/2' @ '3d.Point' @ V_p1 @ ( 'cons/2' @ '3d.Point' @ V_p2 @ ( 'cons/2' @ '3d.Point' @ V_p3 @ V_ps ) ) ) ) ) )
        = ( $sum @ ( '3d.area-of/1' @ ( '3d.triangle/3' @ V_p0 @ V_p1 @ V_p2 ) ) @ ( '3d.area-of/1' @ ( '3d.polygon/1' @ ( 'cons/2' @ '3d.Point' @ V_p0 @ ( 'cons/2' @ '3d.Point' @ V_p2 @ ( 'cons/2' @ '3d.Point' @ V_p3 @ V_ps ) ) ) ) ) ) ) ) )).

thf('3d.def_intersect_obj_segment_axiom',axiom,(
    ! [V_r: '3d.Point',V_q: '3d.Point',V_p: '3d.Point',V_obj: '3d.Shape'] :
      ( ( '3d.segment-type/1' @ ( '3d.seg/2' @ V_p @ V_q ) )
     => ( ( '3d.intersect/3' @ V_obj @ ( '3d.seg/2' @ V_p @ V_q ) @ V_r )
      <=> ( ( '3d.on/2' @ V_r @ ( '3d.seg/2' @ V_p @ V_q ) )
          & ( '3d.on/2' @ V_r @ V_obj ) ) ) ) )).

thf('3d.def_intersect_obj_line_axiom',axiom,(
    ! [V_r: '3d.Point',V_q: '3d.Point',V_p: '3d.Point',V_obj: '3d.Shape'] :
      ( ( '3d.line-type/1' @ ( '3d.line/2' @ V_p @ V_q ) )
     => ( ( '3d.intersect/3' @ V_obj @ ( '3d.line/2' @ V_p @ V_q ) @ V_r )
      <=> ( ( '3d.on/2' @ V_r @ V_obj )
          & ( '3d.on/2' @ V_r @ ( '3d.line/2' @ V_p @ V_q ) ) ) ) ) )).

thf('3d.def_intersect_obj_half_line_axiom',axiom,(
    ! [V_r: '3d.Point',V_q: '3d.Point',V_p: '3d.Point',V_obj: '3d.Shape'] :
      ( ( '3d.half-line-type/1' @ ( '3d.half-line/2' @ V_p @ V_q ) )
     => ( ( '3d.intersect/3' @ V_obj @ ( '3d.half-line/2' @ V_p @ V_q ) @ V_r )
      <=> ( ( '3d.on/2' @ V_r @ V_obj )
          & ( '3d.on/2' @ V_r @ ( '3d.half-line/2' @ V_p @ V_q ) ) ) ) ) )).

thf('3d.def_intersect/2_line_line_axiom',axiom,(
    ! [V_q2: '3d.Point',V_q1: '3d.Point',V_p2: '3d.Point',V_p1: '3d.Point'] :
      ( ( ( '3d.line-type/1' @ ( '3d.line/2' @ V_p1 @ V_p2 ) )
        & ( '3d.line-type/1' @ ( '3d.line/2' @ V_q1 @ V_q2 ) ) )
     => ( ( '3d.intersect/2' @ ( '3d.line/2' @ V_p1 @ V_p2 ) @ ( '3d.line/2' @ V_q1 @ V_q2 ) )
      <=> ( ( '3d.coplanar/4' @ V_p1 @ V_p2 @ V_q1 @ V_q2 )
          & ~ ( '3d.parallel/2' @ ( '3d.line/2' @ V_p1 @ V_p2 ) @ ( '3d.line/2' @ V_q1 @ V_q2 ) ) ) ) ) )).

thf('3d.def_perpendicular_line_vs_line_axiom',axiom,(
    ! [V_s: '3d.Point',V_r: '3d.Point',V_q: '3d.Point',V_p: '3d.Point'] :
      ( ( ( '3d.line-type/1' @ ( '3d.line/2' @ V_p @ V_q ) )
        & ( '3d.line-type/1' @ ( '3d.line/2' @ V_r @ V_s ) ) )
     => ( ( '3d.perpendicular/2' @ ( '3d.line/2' @ V_p @ V_q ) @ ( '3d.line/2' @ V_r @ V_s ) )
      <=> ( 0.0
          = ( '3d.inner-prod/2' @ ( '3d.vec/2' @ V_p @ V_q ) @ ( '3d.vec/2' @ V_r @ V_s ) ) ) ) ) )).

thf('3d.def_perpendicular_seg_vs_seg_axiom',axiom,(
    ! [V_s: '3d.Point',V_r: '3d.Point',V_q: '3d.Point',V_p: '3d.Point'] :
      ( ( ( '3d.segment-type/1' @ ( '3d.seg/2' @ V_p @ V_q ) )
        & ( '3d.segment-type/1' @ ( '3d.seg/2' @ V_r @ V_s ) ) )
     => ( ( '3d.perpendicular/2' @ ( '3d.seg/2' @ V_p @ V_q ) @ ( '3d.seg/2' @ V_r @ V_s ) )
      <=> ( 0.0
          = ( '3d.inner-prod/2' @ ( '3d.vec/2' @ V_p @ V_q ) @ ( '3d.vec/2' @ V_r @ V_s ) ) ) ) ) )).

thf('3d.def_perpendicular_line_vs_seg_axiom',axiom,(
    ! [V_s: '3d.Point',V_r: '3d.Point',V_q: '3d.Point',V_p: '3d.Point'] :
      ( ( ( '3d.line-type/1' @ ( '3d.line/2' @ V_p @ V_q ) )
        & ( '3d.segment-type/1' @ ( '3d.seg/2' @ V_r @ V_s ) ) )
     => ( ( '3d.perpendicular/2' @ ( '3d.line/2' @ V_p @ V_q ) @ ( '3d.seg/2' @ V_r @ V_s ) )
      <=> ( 0.0
          = ( '3d.inner-prod/2' @ ( '3d.vec/2' @ V_p @ V_q ) @ ( '3d.vec/2' @ V_r @ V_s ) ) ) ) ) )).

thf('3d.def_perpendicular_seg_vs_line_axiom',axiom,(
    ! [V_s: '3d.Point',V_r: '3d.Point',V_q: '3d.Point',V_p: '3d.Point'] :
      ( ( ( '3d.segment-type/1' @ ( '3d.seg/2' @ V_p @ V_q ) )
        & ( '3d.line-type/1' @ ( '3d.line/2' @ V_r @ V_s ) ) )
     => ( ( '3d.perpendicular/2' @ ( '3d.seg/2' @ V_p @ V_q ) @ ( '3d.line/2' @ V_r @ V_s ) )
      <=> ( 0.0
          = ( '3d.inner-prod/2' @ ( '3d.vec/2' @ V_p @ V_q ) @ ( '3d.vec/2' @ V_r @ V_s ) ) ) ) ) )).

thf('3d.def_perpendicular_half_line_vs_half_line_axiom',axiom,(
    ! [V_s: '3d.Point',V_r: '3d.Point',V_q: '3d.Point',V_p: '3d.Point'] :
      ( ( ( '3d.half-line-type/1' @ ( '3d.half-line/2' @ V_p @ V_q ) )
        & ( '3d.half-line-type/1' @ ( '3d.half-line/2' @ V_r @ V_s ) ) )
     => ( ( '3d.perpendicular/2' @ ( '3d.half-line/2' @ V_p @ V_q ) @ ( '3d.half-line/2' @ V_r @ V_s ) )
      <=> ( 0.0
          = ( '3d.inner-prod/2' @ ( '3d.vec/2' @ V_p @ V_q ) @ ( '3d.vec/2' @ V_r @ V_s ) ) ) ) ) )).

thf('3d.def_perpendicular_half_line_vs_line_axiom',axiom,(
    ! [V_s: '3d.Point',V_r: '3d.Point',V_q: '3d.Point',V_p: '3d.Point'] :
      ( ( ( '3d.half-line-type/1' @ ( '3d.half-line/2' @ V_p @ V_q ) )
        & ( '3d.line-type/1' @ ( '3d.line/2' @ V_r @ V_s ) ) )
     => ( ( '3d.perpendicular/2' @ ( '3d.half-line/2' @ V_p @ V_q ) @ ( '3d.line/2' @ V_r @ V_s ) )
      <=> ( 0.0
          = ( '3d.inner-prod/2' @ ( '3d.vec/2' @ V_p @ V_q ) @ ( '3d.vec/2' @ V_r @ V_s ) ) ) ) ) )).

thf('3d.def_perpendicular_line_vs_half_line_axiom',axiom,(
    ! [V_s: '3d.Point',V_r: '3d.Point',V_q: '3d.Point',V_p: '3d.Point'] :
      ( ( ( '3d.line-type/1' @ ( '3d.line/2' @ V_p @ V_q ) )
        & ( '3d.half-line-type/1' @ ( '3d.half-line/2' @ V_r @ V_s ) ) )
     => ( ( '3d.perpendicular/2' @ ( '3d.line/2' @ V_p @ V_q ) @ ( '3d.half-line/2' @ V_r @ V_s ) )
      <=> ( 0.0
          = ( '3d.inner-prod/2' @ ( '3d.vec/2' @ V_p @ V_q ) @ ( '3d.vec/2' @ V_r @ V_s ) ) ) ) ) )).

thf('3d.def_perpendicular_half_line_vs_seg_axiom',axiom,(
    ! [V_s: '3d.Point',V_r: '3d.Point',V_q: '3d.Point',V_p: '3d.Point'] :
      ( ( ( '3d.half-line-type/1' @ ( '3d.half-line/2' @ V_p @ V_q ) )
        & ( '3d.segment-type/1' @ ( '3d.seg/2' @ V_r @ V_s ) ) )
     => ( ( '3d.perpendicular/2' @ ( '3d.half-line/2' @ V_p @ V_q ) @ ( '3d.seg/2' @ V_r @ V_s ) )
      <=> ( 0.0
          = ( '3d.inner-prod/2' @ ( '3d.vec/2' @ V_p @ V_q ) @ ( '3d.vec/2' @ V_r @ V_s ) ) ) ) ) )).

thf('3d.def_perpendicular_seg_vs_half_line_axiom',axiom,(
    ! [V_s: '3d.Point',V_r: '3d.Point',V_q: '3d.Point',V_p: '3d.Point'] :
      ( ( ( '3d.segment-type/1' @ ( '3d.seg/2' @ V_p @ V_q ) )
        & ( '3d.half-line-type/1' @ ( '3d.half-line/2' @ V_r @ V_s ) ) )
     => ( ( '3d.perpendicular/2' @ ( '3d.seg/2' @ V_p @ V_q ) @ ( '3d.half-line/2' @ V_r @ V_s ) )
      <=> ( 0.0
          = ( '3d.inner-prod/2' @ ( '3d.vec/2' @ V_p @ V_q ) @ ( '3d.vec/2' @ V_r @ V_s ) ) ) ) ) )).

thf('3d.def_length_of_segment_axiom',axiom,(
    ! [V_Q: '3d.Point',V_P: '3d.Point'] :
      ( ( '3d.segment-type/1' @ ( '3d.seg/2' @ V_P @ V_Q ) )
     => ( ( '3d.length-of/1' @ ( '3d.seg/2' @ V_P @ V_Q ) )
        = ( '3d.distance/2' @ V_P @ V_Q ) ) ) )).

thf('3d.def-perimeter-of-triangle_axiom',axiom,(
    ! [V_R: '3d.Point',V_Q: '3d.Point',V_P: '3d.Point'] :
      ( ( '3d.triangle-type/1' @ ( '3d.triangle/3' @ V_P @ V_Q @ V_R ) )
     => ( ( '3d.length-of/1' @ ( '3d.triangle/3' @ V_P @ V_Q @ V_R ) )
        = ( $sum @ ( '3d.distance/2' @ V_P @ V_Q ) @ ( $sum @ ( '3d.distance/2' @ V_Q @ V_R ) @ ( '3d.distance/2' @ V_R @ V_P ) ) ) ) ) )).

thf('3d.def-perimeter-of-square_axiom',axiom,(
    ! [V_S: '3d.Point',V_R: '3d.Point',V_Q: '3d.Point',V_P: '3d.Point'] :
      ( ( '3d.square-type/1' @ ( '3d.square/4' @ V_P @ V_Q @ V_R @ V_S ) )
     => ( ( '3d.length-of/1' @ ( '3d.square/4' @ V_P @ V_Q @ V_R @ V_S ) )
        = ( $sum @ ( '3d.distance/2' @ V_P @ V_Q ) @ ( $sum @ ( '3d.distance/2' @ V_Q @ V_R ) @ ( $sum @ ( '3d.distance/2' @ V_R @ V_S ) @ ( '3d.distance/2' @ V_S @ V_P ) ) ) ) ) ) )).

thf('3d.def-perimeter-of-polygon_axiom',axiom,(
    ! [V_Ps: ( 'ListOf' @ '3d.Point' )] :
      ( ( '3d.polygon-type/1' @ ( '3d.polygon/1' @ V_Ps ) )
     => ( ( '3d.length-of/1' @ ( '3d.polygon/1' @ V_Ps ) )
        = ( 'sum/1'
          @ ( 'zip-with/3' @ '3d.Point' @ '3d.Point' @ $real
            @ ^ [V_p1: '3d.Point',V_p2: '3d.Point'] :
                ( '3d.distance/2' @ V_p1 @ V_p2 )
            @ V_Ps
            @ ( 'cons/2' @ '3d.Point' @ ( 'last/1' @ '3d.Point' @ V_Ps ) @ V_Ps ) ) ) ) ) )).

thf('3d.def_midpoint_of_axiom',axiom,(
    ! [V_P1: '3d.Point',V_P2: '3d.Point'] :
      ( ( '3d.midpoint-of/2' @ V_P1 @ V_P2 )
      = ( '3d.vec->point/1' @ ( '3d.sv*/2' @ ( $quotient @ 1.0 @ 2.0 ) @ ( '3d.v+/2' @ ( '3d.vec/2' @ '3d.origin/0' @ V_P1 ) @ ( '3d.vec/2' @ '3d.origin/0' @ V_P2 ) ) ) ) ) )).

thf('3d.def_internally_dividing_point_axiom',axiom,(
    ! [V_P1: '3d.Point',V_P2: '3d.Point',V_r: $real] :
      ( ( '3d.internally-dividing-point/3' @ V_P1 @ V_P2 @ V_r )
      = ( '3d.vec->point/1' @ ( '3d.v+/2' @ ( '3d.sv*/2' @ ( $difference @ 1.0 @ V_r ) @ ( '3d.vec/2' @ '3d.origin/0' @ V_P1 ) ) @ ( '3d.sv*/2' @ V_r @ ( '3d.vec/2' @ '3d.origin/0' @ V_P2 ) ) ) ) ) )).

thf('3d.def_point_symmetry_axiom',axiom,(
    ! [V_P1: '3d.Point',V_P2: '3d.Point',V_C: '3d.Point'] :
      ( ( '3d.point-symmetry/3' @ V_P1 @ V_P2 @ V_C )
    <=> ( V_C
        = ( '3d.midpoint-of/2' @ V_P1 @ V_P2 ) ) ) )).

thf('3d.def_point_symmetry_shape_axiom',axiom,(
    ! [V_G: '3d.Shape',V_C: '3d.Point'] :
      ( ( '3d.point-symmetry-shape/2' @ V_G @ V_C )
    <=> ! [V_P: '3d.Point'] :
          ( ( '3d.on/2' @ V_P @ V_G )
         => ? [V_Q: '3d.Point'] :
              ( ( '3d.on/2' @ V_Q @ V_G )
              & ( '3d.point-symmetry/3' @ V_P @ V_Q @ V_C ) ) ) ) )).

thf('3d.def_point_symmetry_shapes_axiom',axiom,(
    ! [V_G1: '3d.Shape',V_G2: '3d.Shape',V_C: '3d.Point'] :
      ( ( '3d.point-symmetry-shapes/3' @ V_G1 @ V_G2 @ V_C )
    <=> ( ! [V_P_dot_0: '3d.Point'] :
            ( ( '3d.on/2' @ V_P_dot_0 @ V_G1 )
           => ? [V_Q_dot_0: '3d.Point'] :
                ( ( '3d.on/2' @ V_Q_dot_0 @ V_G2 )
                & ( '3d.point-symmetry/3' @ V_P_dot_0 @ V_Q_dot_0 @ V_C ) ) )
        & ! [V_P: '3d.Point'] :
            ( ( '3d.on/2' @ V_P @ V_G2 )
           => ? [V_Q: '3d.Point'] :
                ( ( '3d.on/2' @ V_Q @ V_G1 )
                & ( '3d.point-symmetry/3' @ V_P @ V_Q @ V_C ) ) ) ) ) )).

thf('3d.def_line_symmetry_axiom',axiom,(
    ! [V_P1: '3d.Point',V_P2: '3d.Point',V_l: '3d.Shape'] :
      ( ( '3d.line-symmetry/3' @ V_P1 @ V_P2 @ V_l )
    <=> ( ( '3d.on/2' @ ( '3d.midpoint-of/2' @ V_P1 @ V_P2 ) @ V_l )
        & ( '3d.perpendicular/2' @ ( '3d.line/2' @ V_P1 @ V_P2 ) @ V_l ) ) ) )).

thf('3d.def_line_symmetry_shapes_line_and_line_axiom',axiom,(
    ! [V_q2: '3d.Point',V_p2: '3d.Point',V_q1: '3d.Point',V_p1: '3d.Point',V_q0: '3d.Point',V_p0: '3d.Point'] :
      ( ( ( '3d.line-type/1' @ ( '3d.line/2' @ V_p0 @ V_q0 ) )
        & ( '3d.line-type/1' @ ( '3d.line/2' @ V_p1 @ V_q1 ) )
        & ( '3d.line-type/1' @ ( '3d.line/2' @ V_p2 @ V_q2 ) ) )
     => ( ( '3d.line-symmetry-shapes/3' @ ( '3d.line/2' @ V_p0 @ V_q0 ) @ ( '3d.line/2' @ V_p1 @ V_q1 ) @ ( '3d.line/2' @ V_p2 @ V_q2 ) )
      <=> ? [V_P: '3d.Point',V_Q: '3d.Point'] :
            ( ( '3d.line-symmetry/3' @ V_p0 @ V_P @ ( '3d.line/2' @ V_p2 @ V_q2 ) )
            & ( '3d.line-symmetry/3' @ V_q0 @ V_Q @ ( '3d.line/2' @ V_p2 @ V_q2 ) )
            & ( '3d.on/2' @ V_P @ ( '3d.line/2' @ V_p1 @ V_q1 ) )
            & ( '3d.on/2' @ V_Q @ ( '3d.line/2' @ V_p1 @ V_q1 ) ) ) ) ) )).

thf('3d.def_line_symmetry_shapes_axiom',axiom,(
    ! [V_G1: '3d.Shape',V_G2: '3d.Shape',V_l: '3d.Shape'] :
      ( ( '3d.line-symmetry-shapes/3' @ V_G1 @ V_G2 @ V_l )
    <=> ( ( V_G1
          = ( '3d.shape-of-cpfun/1'
            @ ^ [V_P_dot_0: '3d.Point'] :
              ? [V_Q_dot_0: '3d.Point'] :
                ( ( '3d.on/2' @ V_Q_dot_0 @ V_G2 )
                & ( '3d.line-symmetry/3' @ V_P_dot_0 @ V_Q_dot_0 @ V_l ) ) ) )
        & ( V_G2
          = ( '3d.shape-of-cpfun/1'
            @ ^ [V_Q: '3d.Point'] :
              ? [V_P: '3d.Point'] :
                ( ( '3d.on/2' @ V_P @ V_G1 )
                & ( '3d.line-symmetry/3' @ V_P @ V_Q @ V_l ) ) ) ) ) ) )).

thf('3d.def-is-a-side-of-a-triangle_axiom',axiom,(
    ! [V_s: '3d.Shape',V_C: '3d.Point',V_B: '3d.Point',V_A: '3d.Point'] :
      ( ( '3d.triangle-type/1' @ ( '3d.triangle/3' @ V_A @ V_B @ V_C ) )
     => ( ( '3d.is-a-side-of/2' @ V_s @ ( '3d.triangle/3' @ V_A @ V_B @ V_C ) )
      <=> ( 'member/2' @ '3d.Shape' @ V_s @ ( 'cons/2' @ '3d.Shape' @ ( '3d.seg/2' @ V_A @ V_B ) @ ( 'cons/2' @ '3d.Shape' @ ( '3d.seg/2' @ V_B @ V_C ) @ ( 'cons/2' @ '3d.Shape' @ ( '3d.seg/2' @ V_C @ V_A ) @ ( 'nil/0' @ '3d.Shape' ) ) ) ) ) ) ) )).

thf('3d.def-are-the-sides-of-a-triangle_axiom',axiom,(
    ! [V_sides: ( 'ListOf' @ '3d.Shape' ),V_C: '3d.Point',V_B: '3d.Point',V_A: '3d.Point'] :
      ( ( '3d.triangle-type/1' @ ( '3d.triangle/3' @ V_A @ V_B @ V_C ) )
     => ( ( '3d.are-the-sides-of/2' @ V_sides @ ( '3d.triangle/3' @ V_A @ V_B @ V_C ) )
      <=> ( 'is-a-permutation-of/2' @ '3d.Shape' @ V_sides @ ( 'cons/2' @ '3d.Shape' @ ( '3d.seg/2' @ V_A @ V_B ) @ ( 'cons/2' @ '3d.Shape' @ ( '3d.seg/2' @ V_B @ V_C ) @ ( 'cons/2' @ '3d.Shape' @ ( '3d.seg/2' @ V_C @ V_A ) @ ( 'nil/0' @ '3d.Shape' ) ) ) ) ) ) ) )).

thf('3d.def-is-a-side-of-a-square_axiom',axiom,(
    ! [V_s: '3d.Shape',V_D: '3d.Point',V_C: '3d.Point',V_B: '3d.Point',V_A: '3d.Point'] :
      ( ( '3d.square-type/1' @ ( '3d.square/4' @ V_A @ V_B @ V_C @ V_D ) )
     => ( ( '3d.is-a-side-of/2' @ V_s @ ( '3d.square/4' @ V_A @ V_B @ V_C @ V_D ) )
      <=> ( 'member/2' @ '3d.Shape' @ V_s @ ( 'cons/2' @ '3d.Shape' @ ( '3d.seg/2' @ V_A @ V_B ) @ ( 'cons/2' @ '3d.Shape' @ ( '3d.seg/2' @ V_B @ V_C ) @ ( 'cons/2' @ '3d.Shape' @ ( '3d.seg/2' @ V_C @ V_D ) @ ( 'cons/2' @ '3d.Shape' @ ( '3d.seg/2' @ V_D @ V_A ) @ ( 'nil/0' @ '3d.Shape' ) ) ) ) ) ) ) ) )).

thf('3d.def-are-the-sides-of-a-square_axiom',axiom,(
    ! [V_sides: ( 'ListOf' @ '3d.Shape' ),V_D: '3d.Point',V_C: '3d.Point',V_B: '3d.Point',V_A: '3d.Point'] :
      ( ( '3d.square-type/1' @ ( '3d.square/4' @ V_A @ V_B @ V_C @ V_D ) )
     => ( ( '3d.are-the-sides-of/2' @ V_sides @ ( '3d.square/4' @ V_A @ V_B @ V_C @ V_D ) )
      <=> ( 'is-a-permutation-of/2' @ '3d.Shape' @ V_sides @ ( 'cons/2' @ '3d.Shape' @ ( '3d.seg/2' @ V_A @ V_B ) @ ( 'cons/2' @ '3d.Shape' @ ( '3d.seg/2' @ V_B @ V_C ) @ ( 'cons/2' @ '3d.Shape' @ ( '3d.seg/2' @ V_C @ V_D ) @ ( 'cons/2' @ '3d.Shape' @ ( '3d.seg/2' @ V_D @ V_A ) @ ( 'nil/0' @ '3d.Shape' ) ) ) ) ) ) ) ) )).

thf('3d.def-is-a-side-of-a-polygon_axiom',axiom,(
    ! [V_s: '3d.Shape',V_Ps: ( 'ListOf' @ '3d.Point' )] :
      ( ( '3d.polygon-type/1' @ ( '3d.polygon/1' @ V_Ps ) )
     => ( ( '3d.is-a-side-of/2' @ V_s @ ( '3d.polygon/1' @ V_Ps ) )
      <=> ( 'member/2' @ '3d.Shape' @ V_s
          @ ( 'zip-with/3' @ '3d.Point' @ '3d.Point' @ '3d.Shape'
            @ ^ [V_x: '3d.Point',V_y: '3d.Point'] :
                ( '3d.seg/2' @ V_x @ V_y )
            @ ( 'cons/2' @ '3d.Point' @ ( 'last/1' @ '3d.Point' @ V_Ps ) @ V_Ps )
            @ V_Ps ) ) ) ) )).

thf('3d.def-are-the-sides-of-a-polygon_axiom',axiom,(
    ! [V_sides: ( 'ListOf' @ '3d.Shape' ),V_Ps: ( 'ListOf' @ '3d.Point' )] :
      ( ( '3d.polygon-type/1' @ ( '3d.polygon/1' @ V_Ps ) )
     => ( ( '3d.are-the-sides-of/2' @ V_sides @ ( '3d.polygon/1' @ V_Ps ) )
      <=> ( 'is-a-permutation-of/2' @ '3d.Shape' @ V_sides
          @ ( 'zip-with/3' @ '3d.Point' @ '3d.Point' @ '3d.Shape'
            @ ^ [V_x: '3d.Point',V_y: '3d.Point'] :
                ( '3d.seg/2' @ V_x @ V_y )
            @ ( 'cons/2' @ '3d.Point' @ ( 'last/1' @ '3d.Point' @ V_Ps ) @ V_Ps )
            @ V_Ps ) ) ) ) )).

thf('3d.def-sides-of-triangle_axiom',axiom,(
    ! [V_C: '3d.Point',V_B: '3d.Point',V_A: '3d.Point'] :
      ( ( '3d.triangle-type/1' @ ( '3d.triangle/3' @ V_A @ V_B @ V_C ) )
     => ( ( '3d.sides-of/1' @ ( '3d.triangle/3' @ V_A @ V_B @ V_C ) )
        = ( 'cons/2' @ '3d.Shape' @ ( '3d.seg/2' @ V_A @ V_B ) @ ( 'cons/2' @ '3d.Shape' @ ( '3d.seg/2' @ V_B @ V_C ) @ ( 'cons/2' @ '3d.Shape' @ ( '3d.seg/2' @ V_C @ V_A ) @ ( 'nil/0' @ '3d.Shape' ) ) ) ) ) ) )).

thf('3d.def-sides-of-square_axiom',axiom,(
    ! [V_D: '3d.Point',V_C: '3d.Point',V_B: '3d.Point',V_A: '3d.Point'] :
      ( ( '3d.square-type/1' @ ( '3d.square/4' @ V_A @ V_B @ V_C @ V_D ) )
     => ( ( '3d.sides-of/1' @ ( '3d.square/4' @ V_A @ V_B @ V_C @ V_D ) )
        = ( 'cons/2' @ '3d.Shape' @ ( '3d.seg/2' @ V_A @ V_B ) @ ( 'cons/2' @ '3d.Shape' @ ( '3d.seg/2' @ V_B @ V_C ) @ ( 'cons/2' @ '3d.Shape' @ ( '3d.seg/2' @ V_C @ V_D ) @ ( 'cons/2' @ '3d.Shape' @ ( '3d.seg/2' @ V_D @ V_A ) @ ( 'nil/0' @ '3d.Shape' ) ) ) ) ) ) ) )).

thf('3d.def-sides-of-polygon_axiom',axiom,(
    ! [V_Ps: ( 'ListOf' @ '3d.Point' )] :
      ( ( '3d.polygon-type/1' @ ( '3d.polygon/1' @ V_Ps ) )
     => ( ( '3d.sides-of/1' @ ( '3d.polygon/1' @ V_Ps ) )
        = ( 'zip-with/3' @ '3d.Point' @ '3d.Point' @ '3d.Shape'
          @ ^ [V_x: '3d.Point',V_y: '3d.Point'] :
              ( '3d.seg/2' @ V_x @ V_y )
          @ ( 'cons/2' @ '3d.Point' @ ( 'last/1' @ '3d.Point' @ V_Ps ) @ V_Ps )
          @ V_Ps ) ) ) )).

thf('3d.def-is-interior-angle-of-a-triangle_axiom',axiom,(
    ! [V_C: '3d.Point',V_B: '3d.Point',V_A: '3d.Point',V_a: $real] :
      ( ( '3d.triangle-type/1' @ ( '3d.triangle/3' @ V_A @ V_B @ V_C ) )
     => ( ( '3d.is-interior-angle-of/2' @ V_a @ ( '3d.triangle/3' @ V_A @ V_B @ V_C ) )
      <=> ( ( V_a
            = ( '3d.rad-of-angle/1' @ ( '3d.angle/3' @ V_A @ V_B @ V_C ) ) )
          | ( V_a
            = ( '3d.rad-of-angle/1' @ ( '3d.angle/3' @ V_B @ V_C @ V_A ) ) )
          | ( V_a
            = ( '3d.rad-of-angle/1' @ ( '3d.angle/3' @ V_C @ V_A @ V_B ) ) ) ) ) ) )).

thf('3d.def-are-interior-angles-of-a-triangle_axiom',axiom,(
    ! [V_C: '3d.Point',V_B: '3d.Point',V_A: '3d.Point',V_as: ( 'ListOf' @ $real )] :
      ( ( '3d.triangle-type/1' @ ( '3d.triangle/3' @ V_A @ V_B @ V_C ) )
     => ( ( '3d.are-interior-angles-of/2' @ V_as @ ( '3d.triangle/3' @ V_A @ V_B @ V_C ) )
      <=> ( 'is-a-permutation-of/2' @ $real @ V_as @ ( 'cons/2' @ $real @ ( '3d.rad-of-angle/1' @ ( '3d.angle/3' @ V_A @ V_B @ V_C ) ) @ ( 'cons/2' @ $real @ ( '3d.rad-of-angle/1' @ ( '3d.angle/3' @ V_B @ V_C @ V_A ) ) @ ( 'cons/2' @ $real @ ( '3d.rad-of-angle/1' @ ( '3d.angle/3' @ V_C @ V_A @ V_B ) ) @ ( 'nil/0' @ $real ) ) ) ) ) ) ) )).

thf('3d.def-lines-intersect-angle-line-line_axiom',axiom,(
    ! [V_a: $real,V_S: '3d.Point',V_R: '3d.Point',V_Q: '3d.Point',V_P: '3d.Point'] :
      ( ( ( '3d.line-type/1' @ ( '3d.line/2' @ V_P @ V_Q ) )
        & ( '3d.line-type/1' @ ( '3d.line/2' @ V_R @ V_S ) ) )
     => ( ( '3d.lines-intersect-angle/3' @ ( '3d.line/2' @ V_P @ V_Q ) @ ( '3d.line/2' @ V_R @ V_S ) @ V_a )
      <=> ( ( '3d.intersect/2' @ ( '3d.line/2' @ V_P @ V_Q ) @ ( '3d.line/2' @ V_R @ V_S ) )
          & ( $lesseq @ 0.0 @ ( 'cos/1' @ V_a ) )
          & ( ( '^/2' @ ( '3d.inner-prod/2' @ ( '3d.vec/2' @ V_P @ V_Q ) @ ( '3d.vec/2' @ V_R @ V_S ) ) @ 2.0 )
            = ( $product @ ( '3d.distance^2/2' @ V_P @ V_Q ) @ ( $product @ ( '3d.distance^2/2' @ V_R @ V_S ) @ ( '^/2' @ ( 'cos/1' @ V_a ) @ 2.0 ) ) ) ) ) ) ) )).

thf('3d.def-lines-intersect-angle-line-seg_axiom',axiom,(
    ! [V_a: $real,V_S: '3d.Point',V_R: '3d.Point',V_Q: '3d.Point',V_P: '3d.Point'] :
      ( ( ( '3d.line-type/1' @ ( '3d.line/2' @ V_P @ V_Q ) )
        & ( '3d.segment-type/1' @ ( '3d.seg/2' @ V_R @ V_S ) ) )
     => ( ( '3d.lines-intersect-angle/3' @ ( '3d.line/2' @ V_P @ V_Q ) @ ( '3d.seg/2' @ V_R @ V_S ) @ V_a )
      <=> ( '3d.lines-intersect-angle/3' @ ( '3d.line/2' @ V_P @ V_Q ) @ ( '3d.line/2' @ V_R @ V_S ) @ V_a ) ) ) )).

thf('3d.def-lines-intersect-angle-seg-line_axiom',axiom,(
    ! [V_a: $real,V_S: '3d.Point',V_R: '3d.Point',V_Q: '3d.Point',V_P: '3d.Point'] :
      ( ( ( '3d.segment-type/1' @ ( '3d.seg/2' @ V_P @ V_Q ) )
        & ( '3d.line-type/1' @ ( '3d.line/2' @ V_R @ V_S ) ) )
     => ( ( '3d.lines-intersect-angle/3' @ ( '3d.seg/2' @ V_P @ V_Q ) @ ( '3d.line/2' @ V_R @ V_S ) @ V_a )
      <=> ( '3d.lines-intersect-angle/3' @ ( '3d.line/2' @ V_P @ V_Q ) @ ( '3d.line/2' @ V_R @ V_S ) @ V_a ) ) ) )).

thf('3d.def-lines-intersect-angle-seg-seg_axiom',axiom,(
    ! [V_a: $real,V_S: '3d.Point',V_R: '3d.Point',V_Q: '3d.Point',V_P: '3d.Point'] :
      ( ( ( '3d.segment-type/1' @ ( '3d.seg/2' @ V_P @ V_Q ) )
        & ( '3d.segment-type/1' @ ( '3d.seg/2' @ V_R @ V_S ) ) )
     => ( ( '3d.lines-intersect-angle/3' @ ( '3d.seg/2' @ V_P @ V_Q ) @ ( '3d.seg/2' @ V_R @ V_S ) @ V_a )
      <=> ( '3d.lines-intersect-angle/3' @ ( '3d.line/2' @ V_P @ V_Q ) @ ( '3d.line/2' @ V_R @ V_S ) @ V_a ) ) ) )).

thf('3d.def-lines-intersect-angle-half-line-half-line_axiom',axiom,(
    ! [V_a: $real,V_S: '3d.Point',V_R: '3d.Point',V_Q: '3d.Point',V_P: '3d.Point'] :
      ( ( ( '3d.half-line-type/1' @ ( '3d.half-line/2' @ V_P @ V_Q ) )
        & ( '3d.half-line-type/1' @ ( '3d.half-line/2' @ V_R @ V_S ) ) )
     => ( ( '3d.lines-intersect-angle/3' @ ( '3d.half-line/2' @ V_P @ V_Q ) @ ( '3d.half-line/2' @ V_R @ V_S ) @ V_a )
      <=> ( '3d.lines-intersect-angle/3' @ ( '3d.line/2' @ V_P @ V_Q ) @ ( '3d.line/2' @ V_R @ V_S ) @ V_a ) ) ) )).

thf('3d.def-lines-intersect-angle-seg-half-line_axiom',axiom,(
    ! [V_a: $real,V_S: '3d.Point',V_R: '3d.Point',V_Q: '3d.Point',V_P: '3d.Point'] :
      ( ( ( '3d.segment-type/1' @ ( '3d.seg/2' @ V_P @ V_Q ) )
        & ( '3d.half-line-type/1' @ ( '3d.half-line/2' @ V_R @ V_S ) ) )
     => ( ( '3d.lines-intersect-angle/3' @ ( '3d.seg/2' @ V_P @ V_Q ) @ ( '3d.half-line/2' @ V_R @ V_S ) @ V_a )
      <=> ( '3d.lines-intersect-angle/3' @ ( '3d.line/2' @ V_P @ V_Q ) @ ( '3d.line/2' @ V_R @ V_S ) @ V_a ) ) ) )).

thf('3d.def-lines-intersect-angle-line-half-line_axiom',axiom,(
    ! [V_a: $real,V_S: '3d.Point',V_R: '3d.Point',V_Q: '3d.Point',V_P: '3d.Point'] :
      ( ( ( '3d.line-type/1' @ ( '3d.line/2' @ V_P @ V_Q ) )
        & ( '3d.half-line-type/1' @ ( '3d.half-line/2' @ V_R @ V_S ) ) )
     => ( ( '3d.lines-intersect-angle/3' @ ( '3d.line/2' @ V_P @ V_Q ) @ ( '3d.half-line/2' @ V_R @ V_S ) @ V_a )
      <=> ( '3d.lines-intersect-angle/3' @ ( '3d.line/2' @ V_P @ V_Q ) @ ( '3d.line/2' @ V_R @ V_S ) @ V_a ) ) ) )).

thf('3d.def-lines-intersect-angle-half-line-seg_axiom',axiom,(
    ! [V_a: $real,V_S: '3d.Point',V_R: '3d.Point',V_Q: '3d.Point',V_P: '3d.Point'] :
      ( ( ( '3d.half-line-type/1' @ ( '3d.half-line/2' @ V_P @ V_Q ) )
        & ( '3d.segment-type/1' @ ( '3d.seg/2' @ V_R @ V_S ) ) )
     => ( ( '3d.lines-intersect-angle/3' @ ( '3d.half-line/2' @ V_P @ V_Q ) @ ( '3d.seg/2' @ V_R @ V_S ) @ V_a )
      <=> ( '3d.lines-intersect-angle/3' @ ( '3d.line/2' @ V_P @ V_Q ) @ ( '3d.line/2' @ V_R @ V_S ) @ V_a ) ) ) )).

thf('3d.def-lines-intersect-angle-half-line-line_axiom',axiom,(
    ! [V_a: $real,V_S: '3d.Point',V_R: '3d.Point',V_Q: '3d.Point',V_P: '3d.Point'] :
      ( ( ( '3d.half-line-type/1' @ ( '3d.half-line/2' @ V_P @ V_Q ) )
        & ( '3d.line-type/1' @ ( '3d.line/2' @ V_R @ V_S ) ) )
     => ( ( '3d.lines-intersect-angle/3' @ ( '3d.half-line/2' @ V_P @ V_Q ) @ ( '3d.line/2' @ V_R @ V_S ) @ V_a )
      <=> ( '3d.lines-intersect-angle/3' @ ( '3d.line/2' @ V_P @ V_Q ) @ ( '3d.line/2' @ V_R @ V_S ) @ V_a ) ) ) )).

thf('3d.def_shape_shape_distance_line_line_axiom',axiom,(
    ! [V_q2: '3d.Point',V_q1: '3d.Point',V_p2: '3d.Point',V_p1: '3d.Point'] :
      ( ( ( '3d.line-type/1' @ ( '3d.line/2' @ V_p1 @ V_p2 ) )
        & ( '3d.line-type/1' @ ( '3d.line/2' @ V_q1 @ V_q2 ) ) )
     => ( ( '3d.shape-shape-distance/2' @ ( '3d.line/2' @ V_p1 @ V_p2 ) @ ( '3d.line/2' @ V_q1 @ V_q2 ) )
        = ( '3d.line-line-distance/2' @ ( '3d.line/2' @ V_p1 @ V_p2 ) @ ( '3d.line/2' @ V_q1 @ V_q2 ) ) ) ) )).

thf('3d.def_shape_shape_square_distance_line_line_axiom',axiom,(
    ! [V_q2: '3d.Point',V_q1: '3d.Point',V_p2: '3d.Point',V_p1: '3d.Point'] :
      ( ( ( '3d.line-type/1' @ ( '3d.line/2' @ V_p1 @ V_p2 ) )
        & ( '3d.line-type/1' @ ( '3d.line/2' @ V_q1 @ V_q2 ) ) )
     => ( ( '3d.shape-shape-distance^2/2' @ ( '3d.line/2' @ V_p1 @ V_p2 ) @ ( '3d.line/2' @ V_q1 @ V_q2 ) )
        = ( '3d.line-line-distance^2/2' @ ( '3d.line/2' @ V_p1 @ V_p2 ) @ ( '3d.line/2' @ V_q1 @ V_q2 ) ) ) ) )).

thf('3d.def-base-of-isosceles-triangle_axiom',axiom,(
    ! [V_R: '3d.Point',V_Q: '3d.Point',V_P: '3d.Point',V_base: '3d.Shape'] :
      ( ( '3d.triangle-type/1' @ ( '3d.triangle/3' @ V_P @ V_Q @ V_R ) )
     => ( ( '3d.is-base-of/2' @ V_base @ ( '3d.triangle/3' @ V_P @ V_Q @ V_R ) )
      <=> ( ( ( V_base
              = ( '3d.seg/2' @ V_P @ V_Q ) )
            & ( ( '3d.distance^2/2' @ V_P @ V_R )
              = ( '3d.distance^2/2' @ V_Q @ V_R ) ) )
          | ( ( V_base
              = ( '3d.seg/2' @ V_Q @ V_R ) )
            & ( ( '3d.distance^2/2' @ V_Q @ V_P )
              = ( '3d.distance^2/2' @ V_R @ V_P ) ) )
          | ( ( V_base
              = ( '3d.seg/2' @ V_R @ V_P ) )
            & ( ( '3d.distance^2/2' @ V_R @ V_Q )
              = ( '3d.distance^2/2' @ V_P @ V_Q ) ) ) ) ) ) )).

thf('3d.def-is-opposite-wrt-line_axiom',axiom,(
    ! [V_S: '3d.Point',V_R: '3d.Point',V_Q: '3d.Point',V_P: '3d.Point'] :
      ( ( '3d.line-type/1' @ ( '3d.line/2' @ V_R @ V_S ) )
     => ( ( '3d.is-opposite-of-wrt/3' @ V_P @ V_Q @ ( '3d.line/2' @ V_R @ V_S ) )
      <=> ( '3d.intersect/2' @ ( '3d.seg/2' @ V_P @ V_Q ) @ ( '3d.line/2' @ V_R @ V_S ) ) ) ) )).

thf('3d.def-is-opposite-wrt-seg_axiom',axiom,(
    ! [V_S: '3d.Point',V_R: '3d.Point',V_Q: '3d.Point',V_P: '3d.Point'] :
      ( ( '3d.segment-type/1' @ ( '3d.seg/2' @ V_R @ V_S ) )
     => ( ( '3d.is-opposite-of-wrt/3' @ V_P @ V_Q @ ( '3d.seg/2' @ V_R @ V_S ) )
      <=> ( '3d.intersect/2' @ ( '3d.seg/2' @ V_P @ V_Q ) @ ( '3d.line/2' @ V_R @ V_S ) ) ) ) )).

thf('3d.def-foot-of-perpendicular-line-from-to-line_axiom',axiom,(
    ! [V_B: '3d.Point',V_A: '3d.Point',V_P: '3d.Point'] :
      ( ( '3d.line-type/1' @ ( '3d.line/2' @ V_A @ V_B ) )
     => ( ( '3d.foot-of-perpendicular-line-from-to/2' @ V_P @ ( '3d.line/2' @ V_A @ V_B ) )
        = ( '3d.vec->point/1' @ ( '3d.v+/2' @ ( '3d.sv*/2' @ ( $quotient @ ( '3d.inner-prod/2' @ ( '3d.vec/2' @ V_A @ V_B ) @ ( '3d.vec/2' @ V_P @ V_B ) ) @ ( '3d.distance^2/2' @ V_A @ V_B ) ) @ ( '3d.vec/2' @ '3d.origin/0' @ V_A ) ) @ ( '3d.sv*/2' @ ( $difference @ 1.0 @ ( $quotient @ ( '3d.inner-prod/2' @ ( '3d.vec/2' @ V_A @ V_B ) @ ( '3d.vec/2' @ V_P @ V_B ) ) @ ( '3d.distance^2/2' @ V_A @ V_B ) ) ) @ ( '3d.vec/2' @ '3d.origin/0' @ V_B ) ) ) ) ) ) )).

thf('3d.convex-polygon-common-operation/1_type',type,(
    '3d.convex-polygon-common-operation/1': '3d.Shape' > '3d.Shape' )).

thf('3d.def_char_fun_of_shape_of_cpfun_axiom',axiom,(
    ! [V_cpfun: ( '3d.Point' > $o )] :
      ( ( '3d.char-fun-of/1' @ ( '3d.shape-of-cpfun/1' @ V_cpfun ) )
      = V_cpfun ) )).

thf('3d.def_char_fun_of_union_axiom',axiom,(
    ! [V_s1: '3d.Shape',V_s2: '3d.Shape'] :
      ( ( '3d.char-fun-of/1' @ ( '3d.union/2' @ V_s1 @ V_s2 ) )
      = ( ^ [V_P: '3d.Point'] :
            ( ( '3d.char-fun-of/1' @ V_s1 @ V_P )
            | ( '3d.char-fun-of/1' @ V_s2 @ V_P ) ) ) ) )).

thf('3d.def_char_fun_of_union_list_axiom',axiom,(
    ! [V_shapelist: ( 'ListOf' @ '3d.Shape' )] :
      ( ( '3d.char-fun-of/1' @ ( '3d.union/1' @ V_shapelist ) )
      = ( ^ [V_P: '3d.Point'] :
            ( 'some/2' @ '3d.Shape'
            @ ^ [V_shape: '3d.Shape'] :
                ( '3d.char-fun-of/1' @ V_shape @ V_P )
            @ V_shapelist ) ) ) )).

thf('3d.def_char_fun_of_intersection_axiom',axiom,(
    ! [V_s1: '3d.Shape',V_s2: '3d.Shape'] :
      ( ( '3d.char-fun-of/1' @ ( '3d.intersection/2' @ V_s1 @ V_s2 ) )
      = ( ^ [V_P: '3d.Point'] :
            ( ( '3d.char-fun-of/1' @ V_s1 @ V_P )
            & ( '3d.char-fun-of/1' @ V_s2 @ V_P ) ) ) ) )).

thf('3d.def_char_fun_of_intersection_list_axiom',axiom,(
    ! [V_shapelist: ( 'ListOf' @ '3d.Shape' )] :
      ( ( '3d.char-fun-of/1' @ ( '3d.intersection/1' @ V_shapelist ) )
      = ( ^ [V_P: '3d.Point'] :
            ( 'all/2' @ '3d.Shape'
            @ ^ [V_shape: '3d.Shape'] :
                ( '3d.char-fun-of/1' @ V_shape @ V_P )
            @ V_shapelist ) ) ) )).

thf('3d.def_char_fun_of_line_axiom',axiom,(
    ! [V_b: '3d.Point',V_a: '3d.Point'] :
      ( ( '3d.line-type/1' @ ( '3d.line/2' @ V_a @ V_b ) )
     => ( ( '3d.char-fun-of/1' @ ( '3d.line/2' @ V_a @ V_b ) )
        = ( ^ [V_p: '3d.Point'] :
              ( '3d.colinear/3' @ V_p @ V_a @ V_b ) ) ) ) )).

thf('3d.def_char_fun_of_inside_of_half_line_axiom',axiom,(
    ! [V_b: '3d.Point',V_a: '3d.Point'] :
      ( ( '3d.half-line-type/1' @ ( '3d.half-line/2' @ V_a @ V_b ) )
     => ( ( '3d.char-fun-of/1' @ ( '3d.inner-part-of/1' @ ( '3d.half-line/2' @ V_a @ V_b ) ) )
        = ( ^ [V_p: '3d.Point'] :
              ( ( '3d.colinear/3' @ V_p @ V_a @ V_b )
              & ( $less @ 0.0 @ ( '3d.inner-prod/2' @ ( '3d.vec/2' @ V_a @ V_b ) @ ( '3d.vec/2' @ V_a @ V_p ) ) ) ) ) ) ) )).

thf('3d.def_char_fun_of_inside_of_segment_axiom',axiom,(
    ! [V_b: '3d.Point',V_a: '3d.Point'] :
      ( ( '3d.segment-type/1' @ ( '3d.seg/2' @ V_a @ V_b ) )
     => ( ( '3d.char-fun-of/1' @ ( '3d.inner-part-of/1' @ ( '3d.seg/2' @ V_a @ V_b ) ) )
        = ( ^ [V_p: '3d.Point'] :
              ( ( '3d.colinear/3' @ V_p @ V_a @ V_b )
              & ( $less @ 0.0 @ ( '3d.inner-prod/2' @ ( '3d.vec/2' @ V_a @ V_b ) @ ( '3d.vec/2' @ V_a @ V_p ) ) )
              & ( $less @ 0.0 @ ( '3d.inner-prod/2' @ ( '3d.vec/2' @ V_b @ V_a ) @ ( '3d.vec/2' @ V_b @ V_p ) ) ) ) ) ) ) )).

thf('3d.def_char_fun_of_inside_of_polygon_common_axiom',axiom,(
    ! [V_polygon: '3d.Shape'] :
      ( ( '3d.char-fun-of/1' @ ( '3d.inner-part-of/1' @ ( '3d.convex-polygon-common-operation/1' @ V_polygon ) ) )
      = ( ^ [V_p: '3d.Point'] :
            ( ( '3d.coplanar/4' @ V_p @ ( 'car/1' @ '3d.Point' @ ( '3d.vertices-of/1' @ V_polygon ) ) @ ( 'cadr/1' @ '3d.Point' @ ( '3d.vertices-of/1' @ V_polygon ) ) @ ( 'caddr/1' @ '3d.Point' @ ( '3d.vertices-of/1' @ V_polygon ) ) )
            & ( 'cyclic-all/2' @ '3d.Point'
              @ ^ [V_x: '3d.Point',V_y: '3d.Point',V_z: '3d.Point'] :
                  ( '3d.on/2' @ V_p @ ( '3d.inner-part-of/1' @ ( '3d.divided-region-including/2' @ ( '3d.line/2' @ V_x @ V_y ) @ V_z ) ) )
              @ ( '3d.vertices-of/1' @ V_polygon ) ) ) ) ) )).

thf('3d.def_char_fun_of_inside_of_polygon_axiom',axiom,(
    ! [V_vertices: ( 'ListOf' @ '3d.Point' )] :
      ( ( '3d.polygon-type/1' @ ( '3d.polygon/1' @ V_vertices ) )
     => ( ( '3d.char-fun-of/1' @ ( '3d.inner-part-of/1' @ ( '3d.polygon/1' @ V_vertices ) ) )
        = ( '3d.char-fun-of/1' @ ( '3d.inner-part-of/1' @ ( '3d.convex-polygon-common-operation/1' @ ( '3d.polygon/1' @ V_vertices ) ) ) ) ) ) )).

thf('3d.def_char_fun_of_inside_of_triangle_axiom',axiom,(
    ! [V_C: '3d.Point',V_B: '3d.Point',V_A: '3d.Point'] :
      ( ( '3d.triangle-type/1' @ ( '3d.triangle/3' @ V_A @ V_B @ V_C ) )
     => ( ( '3d.char-fun-of/1' @ ( '3d.inner-part-of/1' @ ( '3d.triangle/3' @ V_A @ V_B @ V_C ) ) )
        = ( '3d.char-fun-of/1' @ ( '3d.inner-part-of/1' @ ( '3d.polygon/1' @ ( 'cons/2' @ '3d.Point' @ V_A @ ( 'cons/2' @ '3d.Point' @ V_B @ ( 'cons/2' @ '3d.Point' @ V_C @ ( 'nil/0' @ '3d.Point' ) ) ) ) ) ) ) ) ) )).

thf('3d.def_char_fun_of_inside_of_square_axiom',axiom,(
    ! [V_D: '3d.Point',V_C: '3d.Point',V_B: '3d.Point',V_A: '3d.Point'] :
      ( ( '3d.square-type/1' @ ( '3d.square/4' @ V_A @ V_B @ V_C @ V_D ) )
     => ( ( '3d.char-fun-of/1' @ ( '3d.inner-part-of/1' @ ( '3d.square/4' @ V_A @ V_B @ V_C @ V_D ) ) )
        = ( '3d.char-fun-of/1' @ ( '3d.inner-part-of/1' @ ( '3d.polygon/1' @ ( 'cons/2' @ '3d.Point' @ V_A @ ( 'cons/2' @ '3d.Point' @ V_B @ ( 'cons/2' @ '3d.Point' @ V_C @ ( 'cons/2' @ '3d.Point' @ V_D @ ( 'nil/0' @ '3d.Point' ) ) ) ) ) ) ) ) ) ) )).

thf('3d.def_char_fun_of_inside_of_circle_axiom',axiom,(
    ! [V_circle: '3d.Shape'] :
      ( ( '3d.char-fun-of/1' @ ( '3d.inner-part-of/1' @ ( '3d.circle-shape/1' @ V_circle ) ) )
      = ( ^ [V_p: '3d.Point'] :
            ( ( $less @ ( '3d.distance^2/2' @ ( '3d.center-of/1' @ V_circle ) @ V_p ) @ ( '^/2' @ ( '3d.radius-of/1' @ V_circle ) @ 2.0 ) )
            & ( '3d.on/2' @ V_p @ ( '3d.extend-to-plane/1' @ V_circle ) ) ) ) ) )).

thf('3d.def_char_fun_of_inside_of_disk_axiom',axiom,(
    ! [V_disk: '3d.Shape'] :
      ( ( '3d.char-fun-of/1' @ ( '3d.inner-part-of/1' @ ( '3d.disk-shape/1' @ V_disk ) ) )
      = ( '3d.char-fun-of/1' @ ( '3d.inner-part-of/1' @ ( '3d.circle-shape/1' @ V_disk ) ) ) ) )).

thf('3d.def_char_fun_of_inside_of_arc_axiom',axiom,(
    ! [V_arc: '3d.Shape'] :
      ( ( '3d.char-fun-of/1' @ ( '3d.inner-part-of/1' @ ( '3d.arc-shape/1' @ V_arc ) ) )
      = ( ^ [V_P: '3d.Point'] :
            ( ( '3d.on/2' @ V_P @ ( '3d.extend-to-plane/1' @ V_arc ) )
            & ( V_P
             != ( '3d.center-of/1' @ V_arc ) )
            & ( ( '3d.radius^2/1' @ ( '3d.vec/2' @ ( '3d.center-of/1' @ V_arc ) @ V_P ) )
              = ( '3d.radius^2/1' @ ( '3d.vec/2' @ ( '3d.center-of/1' @ V_arc ) @ ( '3d.arc-ini-point/1' @ V_arc ) ) ) )
            & ( ( ( $lesseq @ 0.0 @ ( '3d.inner-prod/2' @ ( 'cadr/1' @ '3d.Vector' @ ( '3d.local-system-of/1' @ V_arc ) ) @ ( '3d.vec/2' @ ( '3d.center-of/1' @ V_arc ) @ ( '3d.arc-end-point/1' @ V_arc ) ) ) )
                & ( $less @ 0.0 @ ( '3d.inner-prod/2' @ ( 'cadr/1' @ '3d.Vector' @ ( '3d.local-system-of/1' @ V_arc ) ) @ ( '3d.vec/2' @ ( '3d.center-of/1' @ V_arc ) @ V_P ) ) )
                & ( $less @ ( '3d.inner-prod/2' @ ( 'car/1' @ '3d.Vector' @ ( '3d.local-system-of/1' @ V_arc ) ) @ ( '3d.vec/2' @ ( '3d.center-of/1' @ V_arc ) @ ( '3d.arc-end-point/1' @ V_arc ) ) ) @ ( '3d.inner-prod/2' @ ( 'car/1' @ '3d.Vector' @ ( '3d.local-system-of/1' @ V_arc ) ) @ ( '3d.vec/2' @ ( '3d.center-of/1' @ V_arc ) @ V_P ) ) ) )
              | ( ( $less @ ( '3d.inner-prod/2' @ ( 'cadr/1' @ '3d.Vector' @ ( '3d.local-system-of/1' @ V_arc ) ) @ ( '3d.vec/2' @ ( '3d.center-of/1' @ V_arc ) @ ( '3d.arc-end-point/1' @ V_arc ) ) ) @ 0.0 )
                & ( ( $less @ 0.0 @ ( '3d.inner-prod/2' @ ( 'cadr/1' @ '3d.Vector' @ ( '3d.local-system-of/1' @ V_arc ) ) @ ( '3d.vec/2' @ ( '3d.center-of/1' @ V_arc ) @ V_P ) ) )
                  | ( ( $lesseq @ ( '3d.inner-prod/2' @ ( 'cadr/1' @ '3d.Vector' @ ( '3d.local-system-of/1' @ V_arc ) ) @ ( '3d.vec/2' @ ( '3d.center-of/1' @ V_arc ) @ V_P ) ) @ 0.0 )
                    & ( $less @ ( '3d.inner-prod/2' @ ( 'car/1' @ '3d.Vector' @ ( '3d.local-system-of/1' @ V_arc ) ) @ ( '3d.vec/2' @ ( '3d.center-of/1' @ V_arc ) @ V_P ) ) @ ( '3d.inner-prod/2' @ ( 'car/1' @ '3d.Vector' @ ( '3d.local-system-of/1' @ V_arc ) ) @ ( '3d.vec/2' @ ( '3d.center-of/1' @ V_arc ) @ ( '3d.arc-end-point/1' @ V_arc ) ) ) ) ) ) ) ) ) ) ) )).

thf('3d.def_char_fun_of_inside_of_circular_sector_axiom',axiom,(
    ! [V_sector: '3d.Shape'] :
      ( ( '3d.char-fun-of/1' @ ( '3d.inner-part-of/1' @ ( '3d.circular-sector-shape/1' @ V_sector ) ) )
      = ( ^ [V_P: '3d.Point'] :
            ( ( '3d.on/2' @ V_P @ ( '3d.extend-to-plane/1' @ V_sector ) )
            & ( V_P
             != ( '3d.center-of/1' @ V_sector ) )
            & ( $less @ ( '3d.radius^2/1' @ ( '3d.vec/2' @ ( '3d.center-of/1' @ V_sector ) @ V_P ) ) @ ( '3d.radius^2/1' @ ( '3d.vec/2' @ ( '3d.center-of/1' @ V_sector ) @ ( '3d.circular-sector-ini-point/1' @ V_sector ) ) ) )
            & ( ( ( $lesseq @ 0.0 @ ( '3d.inner-prod/2' @ ( 'cadr/1' @ '3d.Vector' @ ( '3d.local-system-of/1' @ V_sector ) ) @ ( '3d.vec/2' @ ( '3d.center-of/1' @ V_sector ) @ ( '3d.circular-sector-end-point/1' @ V_sector ) ) ) )
                & ( $less @ 0.0 @ ( '3d.inner-prod/2' @ ( 'cadr/1' @ '3d.Vector' @ ( '3d.local-system-of/1' @ V_sector ) ) @ ( '3d.vec/2' @ ( '3d.center-of/1' @ V_sector ) @ V_P ) ) )
                & ( $less @ ( $product @ ( '3d.inner-prod/2' @ ( 'car/1' @ '3d.Vector' @ ( '3d.local-system-of/1' @ V_sector ) ) @ ( '3d.vec/2' @ ( '3d.center-of/1' @ V_sector ) @ ( '3d.circular-sector-end-point/1' @ V_sector ) ) ) @ ( '3d.radius/1' @ ( '3d.vec/2' @ ( '3d.center-of/1' @ V_sector ) @ V_P ) ) ) @ ( $product @ ( '3d.inner-prod/2' @ ( 'car/1' @ '3d.Vector' @ ( '3d.local-system-of/1' @ V_sector ) ) @ ( '3d.vec/2' @ ( '3d.center-of/1' @ V_sector ) @ V_P ) ) @ ( '3d.radius/1' @ ( '3d.vec/2' @ ( '3d.center-of/1' @ V_sector ) @ ( '3d.circular-sector-end-point/1' @ V_sector ) ) ) ) ) )
              | ( ( $less @ ( '3d.inner-prod/2' @ ( 'cadr/1' @ '3d.Vector' @ ( '3d.local-system-of/1' @ V_sector ) ) @ ( '3d.vec/2' @ ( '3d.center-of/1' @ V_sector ) @ ( '3d.circular-sector-end-point/1' @ V_sector ) ) ) @ 0.0 )
                & ( ( $less @ 0.0 @ ( '3d.inner-prod/2' @ ( 'cadr/1' @ '3d.Vector' @ ( '3d.local-system-of/1' @ V_sector ) ) @ ( '3d.vec/2' @ ( '3d.center-of/1' @ V_sector ) @ V_P ) ) )
                  | ( ( $lesseq @ ( '3d.inner-prod/2' @ ( 'cadr/1' @ '3d.Vector' @ ( '3d.local-system-of/1' @ V_sector ) ) @ ( '3d.vec/2' @ ( '3d.center-of/1' @ V_sector ) @ V_P ) ) @ 0.0 )
                    & ( $less @ ( $product @ ( '3d.inner-prod/2' @ ( 'car/1' @ '3d.Vector' @ ( '3d.local-system-of/1' @ V_sector ) ) @ ( '3d.vec/2' @ ( '3d.center-of/1' @ V_sector ) @ V_P ) ) @ ( '3d.radius/1' @ ( '3d.vec/2' @ ( '3d.center-of/1' @ V_sector ) @ ( '3d.circular-sector-end-point/1' @ V_sector ) ) ) ) @ ( $product @ ( '3d.inner-prod/2' @ ( 'car/1' @ '3d.Vector' @ ( '3d.local-system-of/1' @ V_sector ) ) @ ( '3d.vec/2' @ ( '3d.center-of/1' @ V_sector ) @ ( '3d.circular-sector-end-point/1' @ V_sector ) ) ) @ ( '3d.radius/1' @ ( '3d.vec/2' @ ( '3d.center-of/1' @ V_sector ) @ V_P ) ) ) ) ) ) ) ) ) ) ) )).

thf('3d.def_char_fun_of_half_line_with_boundary_axiom',axiom,(
    ! [V_b: '3d.Point',V_a: '3d.Point'] :
      ( ( '3d.half-line-type/1' @ ( '3d.half-line/2' @ V_a @ V_b ) )
     => ( ( '3d.char-fun-of/1' @ ( '3d.with-boundary/1' @ ( '3d.half-line/2' @ V_a @ V_b ) ) )
        = ( ^ [V_p: '3d.Point'] :
              ( ( '3d.colinear/3' @ V_p @ V_a @ V_b )
              & ( $lesseq @ 0.0 @ ( '3d.inner-prod/2' @ ( '3d.vec/2' @ V_a @ V_b ) @ ( '3d.vec/2' @ V_a @ V_p ) ) ) ) ) ) ) )).

thf('3d.def_char_fun_of_segment_with_boundary_axiom',axiom,(
    ! [V_b: '3d.Point',V_a: '3d.Point'] :
      ( ( '3d.segment-type/1' @ ( '3d.seg/2' @ V_a @ V_b ) )
     => ( ( '3d.char-fun-of/1' @ ( '3d.with-boundary/1' @ ( '3d.seg/2' @ V_a @ V_b ) ) )
        = ( ^ [V_p: '3d.Point'] :
              ( ( '3d.colinear/3' @ V_p @ V_a @ V_b )
              & ( $lesseq @ 0.0 @ ( '3d.inner-prod/2' @ ( '3d.vec/2' @ V_a @ V_b ) @ ( '3d.vec/2' @ V_a @ V_p ) ) )
              & ( $lesseq @ 0.0 @ ( '3d.inner-prod/2' @ ( '3d.vec/2' @ V_b @ V_a ) @ ( '3d.vec/2' @ V_b @ V_p ) ) ) ) ) ) ) )).

thf('3d.def_char_fun_of_polygon_with_boundary_common_axiom',axiom,(
    ! [V_polygon: '3d.Shape'] :
      ( ( '3d.char-fun-of/1' @ ( '3d.with-boundary/1' @ ( '3d.convex-polygon-common-operation/1' @ V_polygon ) ) )
      = ( ^ [V_p: '3d.Point'] :
            ( ( '3d.coplanar/4' @ V_p @ ( 'car/1' @ '3d.Point' @ ( '3d.vertices-of/1' @ V_polygon ) ) @ ( 'cadr/1' @ '3d.Point' @ ( '3d.vertices-of/1' @ V_polygon ) ) @ ( 'caddr/1' @ '3d.Point' @ ( '3d.vertices-of/1' @ V_polygon ) ) )
            & ( 'cyclic-all/2' @ '3d.Point'
              @ ^ [V_x: '3d.Point',V_y: '3d.Point',V_z: '3d.Point'] :
                  ( '3d.on/2' @ V_p @ ( '3d.with-boundary/1' @ ( '3d.divided-region-including/2' @ ( '3d.line/2' @ V_x @ V_y ) @ V_z ) ) )
              @ ( '3d.vertices-of/1' @ V_polygon ) ) ) ) ) )).

thf('3d.def_char_fun_of_polygon_with_boundary_axiom',axiom,(
    ! [V_vertices: ( 'ListOf' @ '3d.Point' )] :
      ( ( '3d.polygon-type/1' @ ( '3d.polygon/1' @ V_vertices ) )
     => ( ( '3d.char-fun-of/1' @ ( '3d.with-boundary/1' @ ( '3d.polygon/1' @ V_vertices ) ) )
        = ( '3d.char-fun-of/1' @ ( '3d.with-boundary/1' @ ( '3d.convex-polygon-common-operation/1' @ ( '3d.polygon/1' @ V_vertices ) ) ) ) ) ) )).

thf('3d.def_char_fun_of_triangle_with_boundary_axiom',axiom,(
    ! [V_C: '3d.Point',V_B: '3d.Point',V_A: '3d.Point'] :
      ( ( '3d.triangle-type/1' @ ( '3d.triangle/3' @ V_A @ V_B @ V_C ) )
     => ( ( '3d.char-fun-of/1' @ ( '3d.with-boundary/1' @ ( '3d.triangle/3' @ V_A @ V_B @ V_C ) ) )
        = ( '3d.char-fun-of/1' @ ( '3d.with-boundary/1' @ ( '3d.polygon/1' @ ( 'cons/2' @ '3d.Point' @ V_A @ ( 'cons/2' @ '3d.Point' @ V_B @ ( 'cons/2' @ '3d.Point' @ V_C @ ( 'nil/0' @ '3d.Point' ) ) ) ) ) ) ) ) ) )).

thf('3d.def_char_fun_of_square_with_boundary_axiom',axiom,(
    ! [V_D: '3d.Point',V_C: '3d.Point',V_B: '3d.Point',V_A: '3d.Point'] :
      ( ( '3d.square-type/1' @ ( '3d.square/4' @ V_A @ V_B @ V_C @ V_D ) )
     => ( ( '3d.char-fun-of/1' @ ( '3d.with-boundary/1' @ ( '3d.square/4' @ V_A @ V_B @ V_C @ V_D ) ) )
        = ( '3d.char-fun-of/1' @ ( '3d.with-boundary/1' @ ( '3d.polygon/1' @ ( 'cons/2' @ '3d.Point' @ V_A @ ( 'cons/2' @ '3d.Point' @ V_B @ ( 'cons/2' @ '3d.Point' @ V_C @ ( 'cons/2' @ '3d.Point' @ V_D @ ( 'nil/0' @ '3d.Point' ) ) ) ) ) ) ) ) ) ) )).

thf('3d.def_char_fun_of_circle_with_boundary_axiom',axiom,(
    ! [V_circle: '3d.Shape'] :
      ( ( '3d.char-fun-of/1' @ ( '3d.with-boundary/1' @ ( '3d.circle-shape/1' @ V_circle ) ) )
      = ( ^ [V_p: '3d.Point'] :
            ( ( $lesseq @ ( '3d.distance^2/2' @ ( '3d.center-of/1' @ V_circle ) @ V_p ) @ ( '^/2' @ ( '3d.radius-of/1' @ V_circle ) @ 2.0 ) )
            & ( '3d.on/2' @ V_p @ ( '3d.extend-to-plane/1' @ V_circle ) ) ) ) ) )).

thf('3d.def_char_fun_of_disk_with_boundary_axiom',axiom,(
    ! [V_disk: '3d.Shape'] :
      ( ( '3d.char-fun-of/1' @ ( '3d.with-boundary/1' @ ( '3d.disk-shape/1' @ V_disk ) ) )
      = ( '3d.char-fun-of/1' @ ( '3d.with-boundary/1' @ ( '3d.circle-shape/1' @ V_disk ) ) ) ) )).

thf('3d.def_char_fun_of_arc_with_boundary_axiom',axiom,(
    ! [V_arc: '3d.Shape'] :
      ( ( '3d.char-fun-of/1' @ ( '3d.with-boundary/1' @ ( '3d.arc-shape/1' @ V_arc ) ) )
      = ( ^ [V_P: '3d.Point'] :
            ( ( '3d.on/2' @ V_P @ ( '3d.extend-to-plane/1' @ V_arc ) )
            & ( ( '3d.radius^2/1' @ ( '3d.vec/2' @ ( '3d.center-of/1' @ V_arc ) @ V_P ) )
              = ( '3d.radius^2/1' @ ( '3d.vec/2' @ ( '3d.center-of/1' @ V_arc ) @ ( '3d.arc-ini-point/1' @ V_arc ) ) ) )
            & ( ( 0.0
                = ( '3d.radius^2/1' @ ( '3d.vec/2' @ ( '3d.center-of/1' @ V_arc ) @ ( '3d.arc-ini-point/1' @ V_arc ) ) ) )
              | ( ( $lesseq @ 0.0 @ ( '3d.inner-prod/2' @ ( 'cadr/1' @ '3d.Vector' @ ( '3d.local-system-of/1' @ V_arc ) ) @ ( '3d.vec/2' @ ( '3d.center-of/1' @ V_arc ) @ ( '3d.arc-end-point/1' @ V_arc ) ) ) )
                & ( $lesseq @ 0.0 @ ( '3d.inner-prod/2' @ ( 'cadr/1' @ '3d.Vector' @ ( '3d.local-system-of/1' @ V_arc ) ) @ ( '3d.vec/2' @ ( '3d.center-of/1' @ V_arc ) @ V_P ) ) )
                & ( $lesseq @ ( '3d.inner-prod/2' @ ( 'car/1' @ '3d.Vector' @ ( '3d.local-system-of/1' @ V_arc ) ) @ ( '3d.vec/2' @ ( '3d.center-of/1' @ V_arc ) @ ( '3d.arc-end-point/1' @ V_arc ) ) ) @ ( '3d.inner-prod/2' @ ( 'car/1' @ '3d.Vector' @ ( '3d.local-system-of/1' @ V_arc ) ) @ ( '3d.vec/2' @ ( '3d.center-of/1' @ V_arc ) @ V_P ) ) ) )
              | ( ( $less @ ( '3d.inner-prod/2' @ ( 'cadr/1' @ '3d.Vector' @ ( '3d.local-system-of/1' @ V_arc ) ) @ ( '3d.vec/2' @ ( '3d.center-of/1' @ V_arc ) @ ( '3d.arc-end-point/1' @ V_arc ) ) ) @ 0.0 )
                & ( ( $lesseq @ 0.0 @ ( '3d.inner-prod/2' @ ( 'cadr/1' @ '3d.Vector' @ ( '3d.local-system-of/1' @ V_arc ) ) @ ( '3d.vec/2' @ ( '3d.center-of/1' @ V_arc ) @ V_P ) ) )
                  | ( ( $less @ ( '3d.inner-prod/2' @ ( 'cadr/1' @ '3d.Vector' @ ( '3d.local-system-of/1' @ V_arc ) ) @ ( '3d.vec/2' @ ( '3d.center-of/1' @ V_arc ) @ V_P ) ) @ 0.0 )
                    & ( $lesseq @ ( '3d.inner-prod/2' @ ( 'car/1' @ '3d.Vector' @ ( '3d.local-system-of/1' @ V_arc ) ) @ ( '3d.vec/2' @ ( '3d.center-of/1' @ V_arc ) @ V_P ) ) @ ( '3d.inner-prod/2' @ ( 'car/1' @ '3d.Vector' @ ( '3d.local-system-of/1' @ V_arc ) ) @ ( '3d.vec/2' @ ( '3d.center-of/1' @ V_arc ) @ ( '3d.arc-end-point/1' @ V_arc ) ) ) ) ) ) ) ) ) ) ) )).

thf('3d.def_char_fun_of_circular_sector_with_boundary_axiom',axiom,(
    ! [V_sector: '3d.Shape'] :
      ( ( '3d.char-fun-of/1' @ ( '3d.with-boundary/1' @ ( '3d.circular-sector-shape/1' @ V_sector ) ) )
      = ( ^ [V_P: '3d.Point'] :
            ( ( V_P
              = ( '3d.center-of/1' @ V_sector ) )
            | ( ( V_P
               != ( '3d.center-of/1' @ V_sector ) )
              & ( '3d.on/2' @ V_P @ ( '3d.extend-to-plane/1' @ V_sector ) )
              & ( $lesseq @ ( '3d.radius^2/1' @ ( '3d.vec/2' @ ( '3d.center-of/1' @ V_sector ) @ V_P ) ) @ ( '3d.radius^2/1' @ ( '3d.vec/2' @ ( '3d.center-of/1' @ V_sector ) @ ( '3d.circular-sector-ini-point/1' @ V_sector ) ) ) )
              & ( ( ( $lesseq @ 0.0 @ ( '3d.inner-prod/2' @ ( 'cadr/1' @ '3d.Vector' @ ( '3d.local-system-of/1' @ V_sector ) ) @ ( '3d.vec/2' @ ( '3d.center-of/1' @ V_sector ) @ ( '3d.circular-sector-end-point/1' @ V_sector ) ) ) )
                  & ( $lesseq @ 0.0 @ ( '3d.inner-prod/2' @ ( 'cadr/1' @ '3d.Vector' @ ( '3d.local-system-of/1' @ V_sector ) ) @ ( '3d.vec/2' @ ( '3d.center-of/1' @ V_sector ) @ V_P ) ) )
                  & ( $lesseq @ ( $product @ ( '3d.inner-prod/2' @ ( 'car/1' @ '3d.Vector' @ ( '3d.local-system-of/1' @ V_sector ) ) @ ( '3d.vec/2' @ ( '3d.center-of/1' @ V_sector ) @ ( '3d.circular-sector-end-point/1' @ V_sector ) ) ) @ ( '3d.radius/1' @ ( '3d.vec/2' @ ( '3d.center-of/1' @ V_sector ) @ V_P ) ) ) @ ( $product @ ( '3d.inner-prod/2' @ ( 'car/1' @ '3d.Vector' @ ( '3d.local-system-of/1' @ V_sector ) ) @ ( '3d.vec/2' @ ( '3d.center-of/1' @ V_sector ) @ V_P ) ) @ ( '3d.radius/1' @ ( '3d.vec/2' @ ( '3d.center-of/1' @ V_sector ) @ ( '3d.circular-sector-end-point/1' @ V_sector ) ) ) ) ) )
                | ( ( $less @ ( '3d.inner-prod/2' @ ( 'cadr/1' @ '3d.Vector' @ ( '3d.local-system-of/1' @ V_sector ) ) @ ( '3d.vec/2' @ ( '3d.center-of/1' @ V_sector ) @ ( '3d.circular-sector-end-point/1' @ V_sector ) ) ) @ 0.0 )
                  & ( ( $lesseq @ 0.0 @ ( '3d.inner-prod/2' @ ( 'cadr/1' @ '3d.Vector' @ ( '3d.local-system-of/1' @ V_sector ) ) @ ( '3d.vec/2' @ ( '3d.center-of/1' @ V_sector ) @ V_P ) ) )
                    | ( ( $less @ ( '3d.inner-prod/2' @ ( 'cadr/1' @ '3d.Vector' @ ( '3d.local-system-of/1' @ V_sector ) ) @ ( '3d.vec/2' @ ( '3d.center-of/1' @ V_sector ) @ V_P ) ) @ 0.0 )
                      & ( $lesseq @ ( $product @ ( '3d.inner-prod/2' @ ( 'car/1' @ '3d.Vector' @ ( '3d.local-system-of/1' @ V_sector ) ) @ ( '3d.vec/2' @ ( '3d.center-of/1' @ V_sector ) @ V_P ) ) @ ( '3d.radius/1' @ ( '3d.vec/2' @ ( '3d.center-of/1' @ V_sector ) @ ( '3d.circular-sector-end-point/1' @ V_sector ) ) ) ) @ ( $product @ ( '3d.inner-prod/2' @ ( 'car/1' @ '3d.Vector' @ ( '3d.local-system-of/1' @ V_sector ) ) @ ( '3d.vec/2' @ ( '3d.center-of/1' @ V_sector ) @ ( '3d.circular-sector-end-point/1' @ V_sector ) ) ) @ ( '3d.radius/1' @ ( '3d.vec/2' @ ( '3d.center-of/1' @ V_sector ) @ V_P ) ) ) ) ) ) ) ) ) ) ) ) )).

thf('3d.def_char_fun_of_boundary_of_half_line_axiom',axiom,(
    ! [V_R: '3d.Point',V_Q: '3d.Point'] :
      ( ( '3d.half-line-type/1' @ ( '3d.half-line/2' @ V_Q @ V_R ) )
     => ( ( '3d.char-fun-of/1' @ ( '3d.boundary-of/1' @ ( '3d.half-line/2' @ V_Q @ V_R ) ) )
        = ( ^ [V_p: '3d.Point'] : ( V_p = V_Q ) ) ) ) )).

thf('3d.def_char_fun_of_boundary_of_segment_axiom',axiom,(
    ! [V_b: '3d.Point',V_a: '3d.Point'] :
      ( ( '3d.segment-type/1' @ ( '3d.seg/2' @ V_a @ V_b ) )
     => ( ( '3d.char-fun-of/1' @ ( '3d.boundary-of/1' @ ( '3d.seg/2' @ V_a @ V_b ) ) )
        = ( ^ [V_p: '3d.Point'] :
              ( ( V_p = V_a )
              | ( V_p = V_b ) ) ) ) ) )).

thf('3d.def_char_fun_of_boundary_of_polygon_common_axiom',axiom,(
    ! [V_polygon: '3d.Shape'] :
      ( ( '3d.char-fun-of/1' @ ( '3d.boundary-of/1' @ ( '3d.convex-polygon-common-operation/1' @ V_polygon ) ) )
      = ( ^ [V_p: '3d.Point'] :
            ( ( '3d.on/2' @ V_p @ ( '3d.with-boundary/1' @ ( '3d.convex-polygon-common-operation/1' @ V_polygon ) ) )
            & ( 'some/2' @ '3d.Shape'
              @ ^ [V_s: '3d.Shape'] :
                  ( '3d.on/2' @ V_p @ ( '3d.with-boundary/1' @ ( '3d.seg-extention-of/1' @ V_s ) ) )
              @ ( '3d.sides-of/1' @ V_polygon ) ) ) ) ) )).

thf('3d.def_char_fun_of_boundary_of_polygon_axiom',axiom,(
    ! [V_vertices: ( 'ListOf' @ '3d.Point' )] :
      ( ( '3d.polygon-type/1' @ ( '3d.polygon/1' @ V_vertices ) )
     => ( ( '3d.char-fun-of/1' @ ( '3d.boundary-of/1' @ ( '3d.polygon/1' @ V_vertices ) ) )
        = ( '3d.char-fun-of/1' @ ( '3d.boundary-of/1' @ ( '3d.convex-polygon-common-operation/1' @ ( '3d.polygon/1' @ V_vertices ) ) ) ) ) ) )).

thf('3d.def_char_fun_of_boundary_of_triangle_axiom',axiom,(
    ! [V_C: '3d.Point',V_B: '3d.Point',V_A: '3d.Point'] :
      ( ( '3d.triangle-type/1' @ ( '3d.triangle/3' @ V_A @ V_B @ V_C ) )
     => ( ( '3d.char-fun-of/1' @ ( '3d.boundary-of/1' @ ( '3d.triangle/3' @ V_A @ V_B @ V_C ) ) )
        = ( '3d.char-fun-of/1' @ ( '3d.boundary-of/1' @ ( '3d.polygon/1' @ ( 'cons/2' @ '3d.Point' @ V_A @ ( 'cons/2' @ '3d.Point' @ V_B @ ( 'cons/2' @ '3d.Point' @ V_C @ ( 'nil/0' @ '3d.Point' ) ) ) ) ) ) ) ) ) )).

thf('3d.def_char_fun_of_boundary_of_square_axiom',axiom,(
    ! [V_D: '3d.Point',V_C: '3d.Point',V_B: '3d.Point',V_A: '3d.Point'] :
      ( ( '3d.square-type/1' @ ( '3d.square/4' @ V_A @ V_B @ V_C @ V_D ) )
     => ( ( '3d.char-fun-of/1' @ ( '3d.boundary-of/1' @ ( '3d.square/4' @ V_A @ V_B @ V_C @ V_D ) ) )
        = ( '3d.char-fun-of/1' @ ( '3d.boundary-of/1' @ ( '3d.polygon/1' @ ( 'cons/2' @ '3d.Point' @ V_A @ ( 'cons/2' @ '3d.Point' @ V_B @ ( 'cons/2' @ '3d.Point' @ V_C @ ( 'cons/2' @ '3d.Point' @ V_D @ ( 'nil/0' @ '3d.Point' ) ) ) ) ) ) ) ) ) ) )).

thf('3d.def_char_fun_of_boundary_of_circle_axiom',axiom,(
    ! [V_circle: '3d.Shape'] :
      ( ( '3d.char-fun-of/1' @ ( '3d.boundary-of/1' @ ( '3d.circle-shape/1' @ V_circle ) ) )
      = ( ^ [V_p: '3d.Point'] :
            ( ( ( '3d.distance^2/2' @ ( '3d.center-of/1' @ V_circle ) @ V_p )
              = ( '^/2' @ ( '3d.radius-of/1' @ V_circle ) @ 2.0 ) )
            & ( '3d.on/2' @ V_p @ ( '3d.extend-to-plane/1' @ V_circle ) ) ) ) ) )).

thf('3d.def_char_fun_of_boundary_of_disk_axiom',axiom,(
    ! [V_disk: '3d.Shape'] :
      ( ( '3d.char-fun-of/1' @ ( '3d.boundary-of/1' @ ( '3d.disk-shape/1' @ V_disk ) ) )
      = ( '3d.char-fun-of/1' @ ( '3d.boundary-of/1' @ ( '3d.circle-shape/1' @ V_disk ) ) ) ) )).

thf('3d.def_char_fun_of_boundary_of_arc_axiom',axiom,(
    ! [V_arc: '3d.Shape'] :
      ( ( '3d.char-fun-of/1' @ ( '3d.boundary-of/1' @ ( '3d.arc-shape/1' @ V_arc ) ) )
      = ( ^ [V_P: '3d.Point'] :
            ( ( V_P
              = ( '3d.arc-ini-point/1' @ V_arc ) )
            | ( V_P
              = ( '3d.arc-end-point/1' @ V_arc ) ) ) ) ) )).

thf('3d.def_char_fun_of_boundary_of_circular_sector_axiom',axiom,(
    ! [V_sector: '3d.Shape'] :
      ( ( '3d.char-fun-of/1' @ ( '3d.boundary-of/1' @ ( '3d.circular-sector-shape/1' @ V_sector ) ) )
      = ( ^ [V_P: '3d.Point'] :
            ( 'some/2' @ '3d.Shape'
            @ ^ [V_S: '3d.Shape'] :
                ( '3d.on/2' @ V_P @ V_S )
            @ ( '3d.sides-of/1' @ V_sector ) ) ) ) )).

thf('3d.def_char_fun_of_half_line_axiom',axiom,(
    ! [V_R: '3d.Point',V_Q: '3d.Point'] :
      ( ( '3d.half-line-type/1' @ ( '3d.half-line/2' @ V_Q @ V_R ) )
     => ( ( '3d.char-fun-of/1' @ ( '3d.half-line/2' @ V_Q @ V_R ) )
        = ( '3d.char-fun-of/1' @ ( '3d.with-boundary/1' @ ( '3d.half-line/2' @ V_Q @ V_R ) ) ) ) ) )).

thf('3d.def_char_fun_of_segment_axiom',axiom,(
    ! [V_b: '3d.Point',V_a: '3d.Point'] :
      ( ( '3d.segment-type/1' @ ( '3d.seg/2' @ V_a @ V_b ) )
     => ( ( '3d.char-fun-of/1' @ ( '3d.seg/2' @ V_a @ V_b ) )
        = ( '3d.char-fun-of/1' @ ( '3d.with-boundary/1' @ ( '3d.seg/2' @ V_a @ V_b ) ) ) ) ) )).

thf('3d.def_char_fun_of_triangle_axiom',axiom,(
    ! [V_C: '3d.Point',V_B: '3d.Point',V_A: '3d.Point'] :
      ( ( '3d.triangle-type/1' @ ( '3d.triangle/3' @ V_A @ V_B @ V_C ) )
     => ( ( '3d.char-fun-of/1' @ ( '3d.triangle/3' @ V_A @ V_B @ V_C ) )
        = ( '3d.char-fun-of/1' @ ( '3d.with-boundary/1' @ ( '3d.triangle/3' @ V_A @ V_B @ V_C ) ) ) ) ) )).

thf('3d.def_char_fun_of_square_axiom',axiom,(
    ! [V_D: '3d.Point',V_C: '3d.Point',V_B: '3d.Point',V_A: '3d.Point'] :
      ( ( '3d.square-type/1' @ ( '3d.square/4' @ V_A @ V_B @ V_C @ V_D ) )
     => ( ( '3d.char-fun-of/1' @ ( '3d.square/4' @ V_A @ V_B @ V_C @ V_D ) )
        = ( '3d.char-fun-of/1' @ ( '3d.with-boundary/1' @ ( '3d.square/4' @ V_A @ V_B @ V_C @ V_D ) ) ) ) ) )).

thf('3d.def_char_fun_of_polygon_axiom',axiom,(
    ! [V_vertices: ( 'ListOf' @ '3d.Point' )] :
      ( ( '3d.polygon-type/1' @ ( '3d.polygon/1' @ V_vertices ) )
     => ( ( '3d.char-fun-of/1' @ ( '3d.polygon/1' @ V_vertices ) )
        = ( '3d.char-fun-of/1' @ ( '3d.with-boundary/1' @ ( '3d.polygon/1' @ V_vertices ) ) ) ) ) )).

thf('3d.def_char_fun_of_circle_axiom',axiom,(
    ! [V_circle: '3d.Shape'] :
      ( ( '3d.char-fun-of/1' @ ( '3d.circle-shape/1' @ V_circle ) )
      = ( '3d.char-fun-of/1' @ ( '3d.boundary-of/1' @ ( '3d.circle-shape/1' @ V_circle ) ) ) ) )).

thf('3d.def_char_fun_of_disk_axiom',axiom,(
    ! [V_disk: '3d.Shape'] :
      ( ( '3d.char-fun-of/1' @ ( '3d.disk-shape/1' @ V_disk ) )
      = ( '3d.char-fun-of/1' @ ( '3d.with-boundary/1' @ ( '3d.disk-shape/1' @ V_disk ) ) ) ) )).

thf('3d.def_char_fun_of_arc_axiom',axiom,(
    ! [V_arc: '3d.Shape'] :
      ( ( '3d.char-fun-of/1' @ ( '3d.arc-shape/1' @ V_arc ) )
      = ( '3d.char-fun-of/1' @ ( '3d.with-boundary/1' @ ( '3d.arc-shape/1' @ V_arc ) ) ) ) )).

thf('3d.def_char_fun_of_circular_sector_axiom',axiom,(
    ! [V_sector: '3d.Shape'] :
      ( ( '3d.char-fun-of/1' @ ( '3d.circular-sector-shape/1' @ V_sector ) )
      = ( '3d.char-fun-of/1' @ ( '3d.with-boundary/1' @ ( '3d.circular-sector-shape/1' @ V_sector ) ) ) ) )).

thf('3d.def_opposite_vertice_of_polygon_common_axiom',axiom,(
    ! [V_side: '3d.Shape',V_polygon: '3d.Shape'] :
      ( ( '3d.opposite-vertice-of/2' @ V_side @ ( '3d.convex-polygon-common-operation/1' @ V_polygon ) )
      = ( 'car/1' @ '3d.Point' @ ( 'remove-list/2' @ '3d.Point' @ ( '3d.vertices-of/1' @ V_side ) @ ( '3d.vertices-of/1' @ V_polygon ) ) ) ) )).

thf('3d.def_opposite_vertice_of_triangle_axiom',axiom,(
    ! [V_C: '3d.Point',V_B: '3d.Point',V_A: '3d.Point',V_side: '3d.Shape'] :
      ( ( '3d.triangle-type/1' @ ( '3d.triangle/3' @ V_A @ V_B @ V_C ) )
     => ( ( '3d.opposite-vertice-of/2' @ V_side @ ( '3d.triangle/3' @ V_A @ V_B @ V_C ) )
        = ( '3d.opposite-vertice-of/2' @ V_side @ ( '3d.convex-polygon-common-operation/1' @ ( '3d.triangle/3' @ V_A @ V_B @ V_C ) ) ) ) ) )).

thf('3d.def_opposite_vertice_of_square_axiom',axiom,(
    ! [V_D: '3d.Point',V_C: '3d.Point',V_B: '3d.Point',V_A: '3d.Point',V_side: '3d.Shape'] :
      ( ( '3d.square-type/1' @ ( '3d.square/4' @ V_A @ V_B @ V_C @ V_D ) )
     => ( ( '3d.opposite-vertice-of/2' @ V_side @ ( '3d.square/4' @ V_A @ V_B @ V_C @ V_D ) )
        = ( '3d.opposite-vertice-of/2' @ V_side @ ( '3d.convex-polygon-common-operation/1' @ ( '3d.square/4' @ V_A @ V_B @ V_C @ V_D ) ) ) ) ) )).

thf('3d.def_opposite_vertice_of_polygon_axiom',axiom,(
    ! [V_vertices: ( 'ListOf' @ '3d.Point' ),V_side: '3d.Shape'] :
      ( ( '3d.polygon-type/1' @ ( '3d.polygon/1' @ V_vertices ) )
     => ( ( '3d.opposite-vertice-of/2' @ V_side @ ( '3d.polygon/1' @ V_vertices ) )
        = ( '3d.opposite-vertice-of/2' @ V_side @ ( '3d.convex-polygon-common-operation/1' @ ( '3d.polygon/1' @ V_vertices ) ) ) ) ) )).

thf('3d.def_is_diagonal_of_polygon_axiom',axiom,(
    ! [V_vertices: ( 'ListOf' @ '3d.Point' ),V_Q: '3d.Point',V_P: '3d.Point'] :
      ( ( ( '3d.segment-type/1' @ ( '3d.seg/2' @ V_P @ V_Q ) )
        & ( '3d.polygon-type/1' @ ( '3d.polygon/1' @ V_vertices ) ) )
     => ( ( '3d.is-diagonal-of/2' @ ( '3d.seg/2' @ V_P @ V_Q ) @ ( '3d.polygon/1' @ V_vertices ) )
      <=> ( ( 'member/2' @ ( 'Pair' @ '3d.Point' @ '3d.Point' ) @ ( 'pair/2' @ '3d.Point' @ '3d.Point' @ V_P @ V_Q ) @ ( 'all-pairs/1' @ '3d.Point' @ V_vertices ) )
          | ( 'member/2' @ ( 'Pair' @ '3d.Point' @ '3d.Point' ) @ ( 'pair/2' @ '3d.Point' @ '3d.Point' @ V_Q @ V_P ) @ ( 'all-pairs/1' @ '3d.Point' @ V_vertices ) ) ) ) ) )).

thf('3d.def_inside_of_divided_by_line_region_including_axiom',axiom,(
    ! [V_point: '3d.Point',V_q: '3d.Point',V_p: '3d.Point'] :
      ( ( '3d.line-type/1' @ ( '3d.line/2' @ V_p @ V_q ) )
     => ( ( '3d.char-fun-of/1' @ ( '3d.inner-part-of/1' @ ( '3d.divided-region-including/2' @ ( '3d.line/2' @ V_p @ V_q ) @ V_point ) ) )
        = ( ^ [V_P: '3d.Point'] :
              ( $less @ 0.0 @ ( '3d.inner-prod/2' @ ( '3d.vec/2' @ ( '3d.foot-of-perpendicular-line-from-to/2' @ V_point @ ( '3d.line/2' @ V_p @ V_q ) ) @ V_P ) @ ( '3d.vec/2' @ ( '3d.foot-of-perpendicular-line-from-to/2' @ V_point @ ( '3d.line/2' @ V_p @ V_q ) ) @ V_point ) ) ) ) ) ) )).

thf('3d.def_divided_by_line_region_including_with_boundary_axiom',axiom,(
    ! [V_point: '3d.Point',V_q: '3d.Point',V_p: '3d.Point'] :
      ( ( '3d.line-type/1' @ ( '3d.line/2' @ V_p @ V_q ) )
     => ( ( '3d.char-fun-of/1' @ ( '3d.with-boundary/1' @ ( '3d.divided-region-including/2' @ ( '3d.line/2' @ V_p @ V_q ) @ V_point ) ) )
        = ( ^ [V_P: '3d.Point'] :
              ( $lesseq @ 0.0 @ ( '3d.inner-prod/2' @ ( '3d.vec/2' @ ( '3d.foot-of-perpendicular-line-from-to/2' @ V_point @ ( '3d.line/2' @ V_p @ V_q ) ) @ V_P ) @ ( '3d.vec/2' @ ( '3d.foot-of-perpendicular-line-from-to/2' @ V_point @ ( '3d.line/2' @ V_p @ V_q ) ) @ V_point ) ) ) ) ) ) )).

thf('3d.def_divided_by_line_region_including_axiom',axiom,(
    ! [V_point: '3d.Point',V_q: '3d.Point',V_p: '3d.Point'] :
      ( ( '3d.line-type/1' @ ( '3d.line/2' @ V_p @ V_q ) )
     => ( ( '3d.char-fun-of/1' @ ( '3d.divided-region-including/2' @ ( '3d.line/2' @ V_p @ V_q ) @ V_point ) )
        = ( '3d.char-fun-of/1' @ ( '3d.with-boundary/1' @ ( '3d.divided-region-including/2' @ ( '3d.line/2' @ V_p @ V_q ) @ V_point ) ) ) ) ) )).

thf('3d.def-shape-inside-of_axiom',axiom,(
    ! [V_S: '3d.Shape'] :
      ( ( '3d.shape-inside-of/1' @ V_S )
      = ( '3d.shape-of-cpfun/1'
        @ ^ [V_p: '3d.Point'] :
            ( '3d.point-inside-of/2' @ V_p @ V_S ) ) ) )).

thf('3d.def-shape-outside-of_axiom',axiom,(
    ! [V_S: '3d.Shape'] :
      ( ( '3d.shape-outside-of/1' @ V_S )
      = ( '3d.shape-of-cpfun/1'
        @ ^ [V_p: '3d.Point'] :
            ( '3d.point-outside-of/2' @ V_p @ V_S ) ) ) )).

thf('3d.shape-enclosed-by-cpfun/1_type',type,(
    '3d.shape-enclosed-by-cpfun/1': ( 'ListOf' @ ( '3d.Point' > $o ) ) > '3d.Shape' )).

thf('3d.shape-enclosed-by-within/2_type',type,(
    '3d.shape-enclosed-by-within/2': ( 'ListOf' @ ( '3d.Point' > $o ) ) > ( '3d.Point' > $o ) > '3d.Shape' )).

thf('3d.def-shape-enclosed-by-2-shape-enclosed-by-cpfun_axiom',axiom,(
    ! [V_shapes: ( 'ListOf' @ '3d.Shape' )] :
      ( ( '3d.shape-enclosed-by/1' @ V_shapes )
      = ( '3d.shape-enclosed-by-cpfun/1'
        @ ( 'map/2' @ '3d.Shape' @ ( '3d.Point' > $o )
          @ ^ [V_s: '3d.Shape',V_p: '3d.Point'] :
              ( '3d.on/2' @ V_p @ V_s )
          @ V_shapes ) ) ) )).

thf('3d.def-intersection-enc-enc_axiom',axiom,(
    ! [V_boundaries1: ( 'ListOf' @ ( '3d.Point' > $o ) ),V_boundaries2: ( 'ListOf' @ ( '3d.Point' > $o ) )] :
      ( ( '3d.intersection/2' @ ( '3d.shape-enclosed-by-cpfun/1' @ V_boundaries1 ) @ ( '3d.shape-enclosed-by-cpfun/1' @ V_boundaries2 ) )
      = ( '3d.shape-enclosed-by-within/2' @ V_boundaries1 @ ( '3d.char-fun-of/1' @ ( '3d.shape-enclosed-by-cpfun/1' @ V_boundaries2 ) ) ) ) )).

thf('3d.def-intersection-encwithin-and-other_axiom',axiom,(
    ! [V_boundaries: ( 'ListOf' @ ( '3d.Point' > $o ) ),V_shape1: ( '3d.Point' > $o ),V_shape2: '3d.Shape'] :
      ( ( '3d.intersection/2' @ ( '3d.shape-enclosed-by-within/2' @ V_boundaries @ V_shape1 ) @ V_shape2 )
      = ( '3d.shape-enclosed-by-within/2' @ V_boundaries
        @ ^ [V_P: '3d.Point'] :
            ( ( V_shape1 @ V_P )
            & ( '3d.on/2' @ V_P @ V_shape2 ) ) ) ) )).

thf('3d.def-intersection-other-and-encwithin_axiom',axiom,(
    ! [V_boundaries: ( 'ListOf' @ ( '3d.Point' > $o ) ),V_shape1: '3d.Shape',V_shape2: ( '3d.Point' > $o )] :
      ( ( '3d.intersection/2' @ V_shape1 @ ( '3d.shape-enclosed-by-within/2' @ V_boundaries @ V_shape2 ) )
      = ( '3d.intersection/2' @ ( '3d.shape-enclosed-by-within/2' @ V_boundaries @ V_shape2 ) @ V_shape1 ) ) )).

thf('3d.def-intersection-enc-and-other_axiom',axiom,(
    ! [V_boundaries: ( 'ListOf' @ ( '3d.Point' > $o ) ),V_shape: '3d.Shape'] :
      ( ( '3d.intersection/2' @ ( '3d.shape-enclosed-by-cpfun/1' @ V_boundaries ) @ V_shape )
      = ( '3d.shape-enclosed-by-within/2' @ V_boundaries @ ( '3d.char-fun-of/1' @ V_shape ) ) ) )).

thf('3d.def-intersection-other-and-enc_axiom',axiom,(
    ! [V_boundaries: ( 'ListOf' @ ( '3d.Point' > $o ) ),V_shape: '3d.Shape'] :
      ( ( '3d.intersection/2' @ V_shape @ ( '3d.shape-enclosed-by-cpfun/1' @ V_boundaries ) )
      = ( '3d.intersection/2' @ ( '3d.shape-enclosed-by-cpfun/1' @ V_boundaries ) @ V_shape ) ) )).

thf('3d.def_on_shape_enclosed_by_cpfun_axiom',axiom,(
    ! [V_point: '3d.Point',V_boundaries: ( 'ListOf' @ ( '3d.Point' > $o ) )] :
      ( ( '3d.on/2' @ V_point @ ( '3d.shape-enclosed-by-cpfun/1' @ V_boundaries ) )
    <=> ( '3d.char-fun-of/1' @ ( '3d.shape-enclosed-by-cpfun/1' @ V_boundaries ) @ V_point ) ) )).

thf('3d.def_on_shape_enclosed_by_within_axiom',axiom,(
    ! [V_point: '3d.Point',V_boundaries: ( 'ListOf' @ ( '3d.Point' > $o ) ),V_region: ( '3d.Point' > $o )] :
      ( ( '3d.on/2' @ V_point @ ( '3d.shape-enclosed-by-within/2' @ V_boundaries @ V_region ) )
    <=> ( ( '3d.on/2' @ V_point @ ( '3d.shape-enclosed-by-cpfun/1' @ V_boundaries ) )
        & ( V_region @ V_point ) ) ) )).

thf('3d.def_shape_enclosed_by_cpfun_eq_something_axiom',axiom,(
    ! [V_boundaries: ( 'ListOf' @ ( '3d.Point' > $o ) ),V_S: '3d.Shape'] :
      ( ( ( '3d.shape-enclosed-by-cpfun/1' @ V_boundaries )
        = V_S )
    <=> ( ( '3d.shape-of-cpfun/1' @ ( '3d.char-fun-of/1' @ ( '3d.shape-enclosed-by-cpfun/1' @ V_boundaries ) ) )
        = V_S ) ) )).

thf('3d.def-intersection-list_axiom',axiom,(
    ! [V_S1: '3d.Shape',V_S2: '3d.Shape',V_S3: '3d.Shape'] :
      ( ( '3d.intersection/2' @ ( '3d.intersection/2' @ V_S1 @ V_S2 ) @ V_S3 )
      = ( '3d.intersection/2' @ V_S1 @ ( '3d.intersection/2' @ V_S2 @ V_S3 ) ) ) )).

thf('3d.def-intersection-n-to-intersection-list-cons_axiom',axiom,(
    ! [V_hd: '3d.Shape',V_tl: ( 'ListOf' @ '3d.Shape' )] :
      ( ( '3d.intersection/1' @ ( 'cons/2' @ '3d.Shape' @ V_hd @ V_tl ) )
      = ( '3d.intersection/2' @ V_hd @ ( '3d.intersection/1' @ V_tl ) ) ) )).

thf('3d.def-intersection-n-to-intersection-list-nil_axiom',axiom,
    ( ( '3d.intersection/1' @ ( 'nil/0' @ '3d.Shape' ) )
    = ( '3d.shape-of-cpfun/1'
      @ ^ [V__: '3d.Point'] : $true ) )).

thf('3d.half-line-type_axiom',axiom,(
    ! [V_l: '3d.Shape'] :
      ( ( '3d.half-line-type/1' @ V_l )
    <=> ? [V_Q: '3d.Point',V_P: '3d.Point'] :
          ( ( V_l
            = ( '3d.half-line/2' @ V_P @ V_Q ) )
          & ( V_P != V_Q ) ) ) )).

thf('3d.segment-type_axiom',axiom,(
    ! [V_S: '3d.Shape'] :
      ( ( '3d.segment-type/1' @ V_S )
    <=> ? [V_Q: '3d.Point',V_P: '3d.Point'] :
          ( ( V_S
            = ( '3d.seg/2' @ V_P @ V_Q ) )
          & ( V_P != V_Q ) ) ) )).

thf('3d.angle-type_axiom',axiom,(
    ! [V_a: '3d.Angle'] :
      ( ( '3d.angle-type/1' @ V_a )
    <=> ? [V_R: '3d.Point',V_Q: '3d.Point',V_P: '3d.Point'] :
          ( ( V_a
            = ( '3d.angle/3' @ V_P @ V_Q @ V_R ) )
          & ( V_P != V_Q )
          & ( V_R != V_Q ) ) ) )).

thf('3d.triangle-type_axiom',axiom,(
    ! [V_T: '3d.Shape'] :
      ( ( '3d.triangle-type/1' @ V_T )
    <=> ? [V_R: '3d.Point',V_Q: '3d.Point',V_P: '3d.Point'] :
          ( ( V_T
            = ( '3d.triangle/3' @ V_P @ V_Q @ V_R ) )
          & ( '3d.is-triangle/3' @ V_P @ V_Q @ V_R ) ) ) )).

thf('3d.equilateral-triangle-type_axiom',axiom,(
    ! [V_T: '3d.Shape'] :
      ( ( '3d.equilateral-triangle-type/1' @ V_T )
    <=> ? [V_R: '3d.Point',V_Q: '3d.Point',V_P: '3d.Point'] :
          ( ( V_T
            = ( '3d.triangle/3' @ V_P @ V_Q @ V_R ) )
          & ( '3d.is-equilateral-triangle/3' @ V_P @ V_Q @ V_R ) ) ) )).

thf('3d.right-triangle-type_axiom',axiom,(
    ! [V_T: '3d.Shape'] :
      ( ( '3d.right-triangle-type/1' @ V_T )
    <=> ? [V_R: '3d.Point',V_Q: '3d.Point',V_P: '3d.Point'] :
          ( ( V_T
            = ( '3d.triangle/3' @ V_P @ V_Q @ V_R ) )
          & ( '3d.is-right-triangle/3' @ V_P @ V_Q @ V_R ) ) ) )).

thf('3d.acute-triangle-type_axiom',axiom,(
    ! [V_T: '3d.Shape'] :
      ( ( '3d.acute-triangle-type/1' @ V_T )
    <=> ? [V_R: '3d.Point',V_Q: '3d.Point',V_P: '3d.Point'] :
          ( ( V_T
            = ( '3d.triangle/3' @ V_P @ V_Q @ V_R ) )
          & ( '3d.is-acute-triangle/3' @ V_P @ V_Q @ V_R ) ) ) )).

thf('3d.obtuse-triangle-type_axiom',axiom,(
    ! [V_T: '3d.Shape'] :
      ( ( '3d.obtuse-triangle-type/1' @ V_T )
    <=> ? [V_R: '3d.Point',V_Q: '3d.Point',V_P: '3d.Point'] :
          ( ( V_T
            = ( '3d.triangle/3' @ V_P @ V_Q @ V_R ) )
          & ( '3d.is-obtuse-triangle/3' @ V_P @ V_Q @ V_R ) ) ) )).

thf('3d.isosceles-triangle-type_axiom',axiom,(
    ! [V_T: '3d.Shape'] :
      ( ( '3d.isosceles-triangle-type/1' @ V_T )
    <=> ? [V_R: '3d.Point',V_Q: '3d.Point',V_P: '3d.Point'] :
          ( ( V_T
            = ( '3d.triangle/3' @ V_P @ V_Q @ V_R ) )
          & ( '3d.is-isosceles-triangle/3' @ V_P @ V_Q @ V_R ) ) ) )).

thf('3d.square-type_axiom',axiom,(
    ! [V_s: '3d.Shape'] :
      ( ( '3d.square-type/1' @ V_s )
    <=> ? [V_S: '3d.Point',V_R: '3d.Point',V_Q: '3d.Point',V_P: '3d.Point'] :
          ( ( V_s
            = ( '3d.square/4' @ V_P @ V_Q @ V_R @ V_S ) )
          & ( '3d.is-square/4' @ V_P @ V_Q @ V_R @ V_S ) ) ) )).

thf('3d.rectangle-type_axiom',axiom,(
    ! [V_s: '3d.Shape'] :
      ( ( '3d.rectangle-type/1' @ V_s )
    <=> ? [V_S: '3d.Point',V_R: '3d.Point',V_Q: '3d.Point',V_P: '3d.Point'] :
          ( ( V_s
            = ( '3d.square/4' @ V_P @ V_Q @ V_R @ V_S ) )
          & ( '3d.is-rectangle/4' @ V_P @ V_Q @ V_R @ V_S ) ) ) )).

thf('3d.regular-square-type_axiom',axiom,(
    ! [V_s: '3d.Shape'] :
      ( ( '3d.regular-square-type/1' @ V_s )
    <=> ? [V_S: '3d.Point',V_R: '3d.Point',V_Q: '3d.Point',V_P: '3d.Point'] :
          ( ( V_s
            = ( '3d.square/4' @ V_P @ V_Q @ V_R @ V_S ) )
          & ( '3d.is-rectangle/4' @ V_P @ V_Q @ V_R @ V_S )
          & ( '3d.is-rhombus/4' @ V_P @ V_Q @ V_R @ V_S ) ) ) )).

thf('3d.regular-pentagon-type_axiom',axiom,(
    ! [V_s: '3d.Shape'] :
      ( ( '3d.regular-pentagon-type/1' @ V_s )
    <=> ? [V_T: '3d.Point',V_S: '3d.Point',V_R: '3d.Point',V_Q: '3d.Point',V_P: '3d.Point'] :
          ( ( V_s
            = ( '3d.polygon/1' @ ( 'cons/2' @ '3d.Point' @ V_P @ ( 'cons/2' @ '3d.Point' @ V_Q @ ( 'cons/2' @ '3d.Point' @ V_R @ ( 'cons/2' @ '3d.Point' @ V_S @ ( 'cons/2' @ '3d.Point' @ V_T @ ( 'nil/0' @ '3d.Point' ) ) ) ) ) ) ) )
          & ( '3d.is-regular-polygon/1' @ ( '3d.polygon/1' @ ( 'cons/2' @ '3d.Point' @ V_P @ ( 'cons/2' @ '3d.Point' @ V_Q @ ( 'cons/2' @ '3d.Point' @ V_R @ ( 'cons/2' @ '3d.Point' @ V_S @ ( 'cons/2' @ '3d.Point' @ V_T @ ( 'nil/0' @ '3d.Point' ) ) ) ) ) ) ) ) ) ) )).

thf('3d.regular-hexagon-type_axiom',axiom,(
    ! [V_s: '3d.Shape'] :
      ( ( '3d.regular-hexagon-type/1' @ V_s )
    <=> ? [V_U: '3d.Point',V_T: '3d.Point',V_S: '3d.Point',V_R: '3d.Point',V_Q: '3d.Point',V_P: '3d.Point'] :
          ( ( V_s
            = ( '3d.polygon/1' @ ( 'cons/2' @ '3d.Point' @ V_P @ ( 'cons/2' @ '3d.Point' @ V_Q @ ( 'cons/2' @ '3d.Point' @ V_R @ ( 'cons/2' @ '3d.Point' @ V_S @ ( 'cons/2' @ '3d.Point' @ V_T @ ( 'cons/2' @ '3d.Point' @ V_U @ ( 'nil/0' @ '3d.Point' ) ) ) ) ) ) ) ) )
          & ( '3d.is-regular-polygon/1' @ ( '3d.polygon/1' @ ( 'cons/2' @ '3d.Point' @ V_P @ ( 'cons/2' @ '3d.Point' @ V_Q @ ( 'cons/2' @ '3d.Point' @ V_R @ ( 'cons/2' @ '3d.Point' @ V_S @ ( 'cons/2' @ '3d.Point' @ V_T @ ( 'cons/2' @ '3d.Point' @ V_U @ ( 'nil/0' @ '3d.Point' ) ) ) ) ) ) ) ) ) ) ) )).

thf('3d.rhombus-type_axiom',axiom,(
    ! [V_s: '3d.Shape'] :
      ( ( '3d.rhombus-type/1' @ V_s )
    <=> ? [V_S: '3d.Point',V_R: '3d.Point',V_Q: '3d.Point',V_P: '3d.Point'] :
          ( ( V_s
            = ( '3d.square/4' @ V_P @ V_Q @ V_R @ V_S ) )
          & ( '3d.is-rhombus/4' @ V_P @ V_Q @ V_R @ V_S ) ) ) )).

thf('3d.trapezoid-type_axiom',axiom,(
    ! [V_s: '3d.Shape'] :
      ( ( '3d.trapezoid-type/1' @ V_s )
    <=> ? [V_S: '3d.Point',V_R: '3d.Point',V_Q: '3d.Point',V_P: '3d.Point'] :
          ( ( V_s
            = ( '3d.square/4' @ V_P @ V_Q @ V_R @ V_S ) )
          & ( '3d.is-trapezoid/4' @ V_P @ V_Q @ V_R @ V_S ) ) ) )).

thf('3d.parallelogram-type_axiom',axiom,(
    ! [V_s: '3d.Shape'] :
      ( ( '3d.parallelogram-type/1' @ V_s )
    <=> ? [V_S: '3d.Point',V_R: '3d.Point',V_Q: '3d.Point',V_P: '3d.Point'] :
          ( ( V_s
            = ( '3d.square/4' @ V_P @ V_Q @ V_R @ V_S ) )
          & ( '3d.is-parallelogram/4' @ V_P @ V_Q @ V_R @ V_S ) ) ) )).

thf('3d.def_seg_connects_points_axiom',axiom,(
    ! [V_Q1: '3d.Point',V_P1: '3d.Point',V_Q0: '3d.Point',V_P0: '3d.Point'] :
      ( ( '3d.segment-type/1' @ ( '3d.seg/2' @ V_P0 @ V_Q0 ) )
     => ( ( '3d.connect/2' @ ( '3d.seg/2' @ V_P0 @ V_Q0 ) @ ( 'cons/2' @ '3d.Point' @ V_P1 @ ( 'cons/2' @ '3d.Point' @ V_Q1 @ ( 'nil/0' @ '3d.Point' ) ) ) )
      <=> ( ( ( V_P0 = V_P1 )
            & ( V_Q0 = V_Q1 ) )
          | ( ( V_P0 = V_Q1 )
            & ( V_Q0 = V_P1 ) ) ) ) ) )).

thf('3d.def-two-sides-of-rectangle_axiom',axiom,(
    ! [V_S: '3d.Point',V_R: '3d.Point',V_Q: '3d.Point',V_P: '3d.Point'] :
      ( ( '3d.square-type/1' @ ( '3d.square/4' @ V_P @ V_Q @ V_R @ V_S ) )
     => ( ( '3d.two-sides-of-rectangle/1' @ ( '3d.square/4' @ V_P @ V_Q @ V_R @ V_S ) )
        = ( 'pair/2' @ '3d.Shape' @ '3d.Shape' @ ( '3d.seg/2' @ V_P @ V_Q ) @ ( '3d.seg/2' @ V_Q @ V_R ) ) ) ) )).

thf('3d.def_parallel_line_vs_line_axiom',axiom,(
    ! [V_s: '3d.Point',V_r: '3d.Point',V_q: '3d.Point',V_p: '3d.Point'] :
      ( ( ( '3d.line-type/1' @ ( '3d.line/2' @ V_p @ V_q ) )
        & ( '3d.line-type/1' @ ( '3d.line/2' @ V_r @ V_s ) ) )
     => ( ( '3d.parallel/2' @ ( '3d.line/2' @ V_p @ V_q ) @ ( '3d.line/2' @ V_r @ V_s ) )
      <=> ( '3d.vec-parallel/2' @ ( '3d.vec/2' @ V_p @ V_q ) @ ( '3d.vec/2' @ V_r @ V_s ) ) ) ) )).

thf('3d.def_parallel_seg_vs_seg_axiom',axiom,(
    ! [V_s: '3d.Point',V_r: '3d.Point',V_q: '3d.Point',V_p: '3d.Point'] :
      ( ( ( '3d.segment-type/1' @ ( '3d.seg/2' @ V_p @ V_q ) )
        & ( '3d.segment-type/1' @ ( '3d.seg/2' @ V_r @ V_s ) ) )
     => ( ( '3d.parallel/2' @ ( '3d.seg/2' @ V_p @ V_q ) @ ( '3d.seg/2' @ V_r @ V_s ) )
      <=> ( '3d.vec-parallel/2' @ ( '3d.vec/2' @ V_p @ V_q ) @ ( '3d.vec/2' @ V_r @ V_s ) ) ) ) )).

thf('3d.def_parallel_seg_vs_line_axiom',axiom,(
    ! [V_s: '3d.Point',V_r: '3d.Point',V_q: '3d.Point',V_p: '3d.Point'] :
      ( ( ( '3d.segment-type/1' @ ( '3d.seg/2' @ V_p @ V_q ) )
        & ( '3d.line-type/1' @ ( '3d.line/2' @ V_r @ V_s ) ) )
     => ( ( '3d.parallel/2' @ ( '3d.seg/2' @ V_p @ V_q ) @ ( '3d.line/2' @ V_r @ V_s ) )
      <=> ( '3d.vec-parallel/2' @ ( '3d.vec/2' @ V_p @ V_q ) @ ( '3d.vec/2' @ V_r @ V_s ) ) ) ) )).

thf('3d.def_parallel_line_vs_seg_axiom',axiom,(
    ! [V_s: '3d.Point',V_r: '3d.Point',V_q: '3d.Point',V_p: '3d.Point'] :
      ( ( ( '3d.line-type/1' @ ( '3d.line/2' @ V_p @ V_q ) )
        & ( '3d.segment-type/1' @ ( '3d.seg/2' @ V_r @ V_s ) ) )
     => ( ( '3d.parallel/2' @ ( '3d.line/2' @ V_p @ V_q ) @ ( '3d.seg/2' @ V_r @ V_s ) )
      <=> ( '3d.vec-parallel/2' @ ( '3d.vec/2' @ V_p @ V_q ) @ ( '3d.vec/2' @ V_r @ V_s ) ) ) ) )).

thf('3d.def-tangent-arity2_axiom',axiom,(
    ! [V_C1: '3d.Shape',V_C2: '3d.Shape'] :
      ( ( '3d.tangent/2' @ V_C1 @ V_C2 )
    <=> ? [V_P: '3d.Point'] :
          ( '3d.tangent/3' @ V_C1 @ V_C2 @ V_P ) ) )).

thf('3d.def-matrix-pow-0_axiom',axiom,(
    ! [V_m: '3d.Matrix'] :
      ( ( '3d.m^/2' @ V_m @ 0 )
      = '3d.identity-matrix/0' ) )).

thf('3d.def-matrix-pow-1_axiom',axiom,(
    ! [V_m: '3d.Matrix'] :
      ( ( '3d.m^/2' @ V_m @ 1 )
      = V_m ) )).

thf('3d.def-matrix-pow-2_axiom',axiom,(
    ! [V_m: '3d.Matrix'] :
      ( ( '3d.m^/2' @ V_m @ 2 )
      = ( '3d.m*/2' @ V_m @ V_m ) ) )).

thf('3d.def-matrix-pow-3_axiom',axiom,(
    ! [V_m: '3d.Matrix'] :
      ( ( '3d.m^/2' @ V_m @ 3 )
      = ( '3d.m*/2' @ V_m @ ( '3d.m*/2' @ V_m @ V_m ) ) ) )).

thf('3d.def-matrix-pow-4_axiom',axiom,(
    ! [V_m: '3d.Matrix'] :
      ( ( '3d.m^/2' @ V_m @ 4 )
      = ( '3d.m*/2' @ V_m @ ( '3d.m*/2' @ V_m @ ( '3d.m*/2' @ V_m @ V_m ) ) ) ) )).

thf('3d.def-matrix-pow-5_axiom',axiom,(
    ! [V_m: '3d.Matrix'] :
      ( ( '3d.m^/2' @ V_m @ 5 )
      = ( '3d.m*/2' @ V_m @ ( '3d.m*/2' @ V_m @ ( '3d.m*/2' @ V_m @ ( '3d.m*/2' @ V_m @ V_m ) ) ) ) ) )).

thf('3d.def-matrix-pow-6_axiom',axiom,(
    ! [V_m: '3d.Matrix'] :
      ( ( '3d.m^/2' @ V_m @ 6 )
      = ( '3d.m*/2' @ V_m @ ( '3d.m*/2' @ V_m @ ( '3d.m*/2' @ V_m @ ( '3d.m*/2' @ V_m @ ( '3d.m*/2' @ V_m @ V_m ) ) ) ) ) ) )).

thf('3d.def-matrix-sum_axiom',axiom,(
    ! [V_ms: ( 'ListOf' @ '3d.Matrix' )] :
      ( ( '3d.m-sum/1' @ V_ms )
      = ( 'foldr1/2' @ '3d.Matrix'
        @ ^ [V_m1: '3d.Matrix',V_m2: '3d.Matrix'] :
            ( '3d.m+/2' @ V_m1 @ V_m2 )
        @ V_ms ) ) )).

thf('3d.def-matrix-prod_axiom',axiom,(
    ! [V_ms: ( 'ListOf' @ '3d.Matrix' )] :
      ( ( '3d.m-prod/1' @ V_ms )
      = ( 'foldr1/2' @ '3d.Matrix'
        @ ^ [V_m1: '3d.Matrix',V_m2: '3d.Matrix'] :
            ( '3d.m*/2' @ V_m1 @ V_m2 )
        @ V_ms ) ) )).

thf('3d.def-is-inverse-matrix-of_axiom',axiom,(
    ! [V_m1: '3d.Matrix',V_m2: '3d.Matrix'] :
      ( ( '3d.is-inverse-of/2' @ V_m1 @ V_m2 )
    <=> ( ( '3d.m*/2' @ V_m1 @ V_m2 )
        = '3d.identity-matrix/0' ) ) )).

thf('3d.def-is-matrix_axiom',axiom,(
    ! [V_m: '3d.Matrix'] :
      ( '3d.is-matrix/1' @ V_m ) )).

thf('3d.def-boundary-of-triangle_axiom',axiom,(
    ! [V_R: '3d.Point',V_Q: '3d.Point',V_P: '3d.Point'] :
      ( ( '3d.triangle-type/1' @ ( '3d.triangle/3' @ V_P @ V_Q @ V_R ) )
     => ( ( '3d.boundary-of/1' @ ( '3d.triangle/3' @ V_P @ V_Q @ V_R ) )
        = ( '3d.union/1' @ ( 'cons/2' @ '3d.Shape' @ ( '3d.seg/2' @ V_P @ V_Q ) @ ( 'cons/2' @ '3d.Shape' @ ( '3d.seg/2' @ V_Q @ V_R ) @ ( 'cons/2' @ '3d.Shape' @ ( '3d.seg/2' @ V_R @ V_P ) @ ( 'nil/0' @ '3d.Shape' ) ) ) ) ) ) ) )).

thf('3d.def-boundary-of-square_axiom',axiom,(
    ! [V_S: '3d.Point',V_R: '3d.Point',V_Q: '3d.Point',V_P: '3d.Point'] :
      ( ( '3d.square-type/1' @ ( '3d.square/4' @ V_P @ V_Q @ V_R @ V_S ) )
     => ( ( '3d.boundary-of/1' @ ( '3d.square/4' @ V_P @ V_Q @ V_R @ V_S ) )
        = ( '3d.union/1' @ ( 'cons/2' @ '3d.Shape' @ ( '3d.seg/2' @ V_P @ V_Q ) @ ( 'cons/2' @ '3d.Shape' @ ( '3d.seg/2' @ V_Q @ V_R ) @ ( 'cons/2' @ '3d.Shape' @ ( '3d.seg/2' @ V_R @ V_S ) @ ( 'cons/2' @ '3d.Shape' @ ( '3d.seg/2' @ V_S @ V_P ) @ ( 'nil/0' @ '3d.Shape' ) ) ) ) ) ) ) ) )).

thf('3d.boundary-of-polygon-main/1_type',type,(
    '3d.boundary-of-polygon-main/1': ( 'ListOf' @ '3d.Point' ) > '3d.Shape' )).

thf('3d.def-boundary-of-polygon-main-basecase_axiom',axiom,(
    ! [V_p1: '3d.Point',V_p2: '3d.Point'] :
      ( ( '3d.boundary-of-polygon-main/1' @ ( 'cons/2' @ '3d.Point' @ V_p1 @ ( 'cons/2' @ '3d.Point' @ V_p2 @ ( 'nil/0' @ '3d.Point' ) ) ) )
      = ( '3d.seg/2' @ V_p1 @ V_p2 ) ) )).

thf('3d.def-boundary-of-polygon-main_axiom',axiom,(
    ! [V_p1: '3d.Point',V_p2: '3d.Point',V_p3: '3d.Point',V_Ps: ( 'ListOf' @ '3d.Point' )] :
      ( ( '3d.boundary-of-polygon-main/1' @ ( 'cons/2' @ '3d.Point' @ V_p1 @ ( 'cons/2' @ '3d.Point' @ V_p2 @ ( 'cons/2' @ '3d.Point' @ V_p3 @ V_Ps ) ) ) )
      = ( '3d.union/2' @ ( '3d.seg/2' @ V_p1 @ V_p2 ) @ ( '3d.boundary-of-polygon-main/1' @ ( 'cons/2' @ '3d.Point' @ V_p2 @ ( 'cons/2' @ '3d.Point' @ V_p3 @ V_Ps ) ) ) ) ) )).

thf('3d.def-boundary-of-polygon_axiom',axiom,(
    ! [V_Ps: ( 'ListOf' @ '3d.Point' )] :
      ( ( '3d.polygon-type/1' @ ( '3d.polygon/1' @ V_Ps ) )
     => ( ( '3d.boundary-of/1' @ ( '3d.polygon/1' @ V_Ps ) )
        = ( '3d.boundary-of-polygon-main/1' @ ( 'append/2' @ '3d.Point' @ V_Ps @ ( 'cons/2' @ '3d.Point' @ ( 'car/1' @ '3d.Point' @ V_Ps ) @ ( 'nil/0' @ '3d.Point' ) ) ) ) ) ) )).

thf('3d.def-translation-of-half-line_axiom',axiom,(
    ! [V_v: '3d.Vector',V_Q: '3d.Point',V_P: '3d.Point'] :
      ( ( '3d.half-line-type/1' @ ( '3d.half-line/2' @ V_P @ V_Q ) )
     => ( ( '3d.translate/2' @ ( '3d.half-line/2' @ V_P @ V_Q ) @ V_v )
        = ( '3d.half-line/2' @ ( '3d.vec-translate/2' @ V_P @ V_v ) @ ( '3d.vec-translate/2' @ V_Q @ V_v ) ) ) ) )).

thf('3d.def-translation-of-line_axiom',axiom,(
    ! [V_v: '3d.Vector',V_Q: '3d.Point',V_P: '3d.Point'] :
      ( ( '3d.line-type/1' @ ( '3d.line/2' @ V_P @ V_Q ) )
     => ( ( '3d.translate/2' @ ( '3d.line/2' @ V_P @ V_Q ) @ V_v )
        = ( '3d.line/2' @ ( '3d.vec-translate/2' @ V_P @ V_v ) @ ( '3d.vec-translate/2' @ V_Q @ V_v ) ) ) ) )).

thf('3d.def-translation-of-seg_axiom',axiom,(
    ! [V_v: '3d.Vector',V_Q: '3d.Point',V_P: '3d.Point'] :
      ( ( '3d.segment-type/1' @ ( '3d.seg/2' @ V_P @ V_Q ) )
     => ( ( '3d.translate/2' @ ( '3d.seg/2' @ V_P @ V_Q ) @ V_v )
        = ( '3d.seg/2' @ ( '3d.vec-translate/2' @ V_P @ V_v ) @ ( '3d.vec-translate/2' @ V_Q @ V_v ) ) ) ) )).

thf('3d.def-translation-of-triangle_axiom',axiom,(
    ! [V_v: '3d.Vector',V_R: '3d.Point',V_Q: '3d.Point',V_P: '3d.Point'] :
      ( ( '3d.triangle-type/1' @ ( '3d.triangle/3' @ V_P @ V_Q @ V_R ) )
     => ( ( '3d.translate/2' @ ( '3d.triangle/3' @ V_P @ V_Q @ V_R ) @ V_v )
        = ( '3d.triangle/3' @ ( '3d.vec-translate/2' @ V_P @ V_v ) @ ( '3d.vec-translate/2' @ V_Q @ V_v ) @ ( '3d.vec-translate/2' @ V_R @ V_v ) ) ) ) )).

thf('3d.def-translation-of-square_axiom',axiom,(
    ! [V_v: '3d.Vector',V_S: '3d.Point',V_R: '3d.Point',V_Q: '3d.Point',V_P: '3d.Point'] :
      ( ( '3d.square-type/1' @ ( '3d.square/4' @ V_P @ V_Q @ V_R @ V_S ) )
     => ( ( '3d.translate/2' @ ( '3d.square/4' @ V_P @ V_Q @ V_R @ V_S ) @ V_v )
        = ( '3d.square/4' @ ( '3d.vec-translate/2' @ V_P @ V_v ) @ ( '3d.vec-translate/2' @ V_Q @ V_v ) @ ( '3d.vec-translate/2' @ V_R @ V_v ) @ ( '3d.vec-translate/2' @ V_S @ V_v ) ) ) ) )).

thf('3d.def-translation-of-polygon_axiom',axiom,(
    ! [V_v: '3d.Vector',V_Ps: ( 'ListOf' @ '3d.Point' )] :
      ( ( '3d.polygon-type/1' @ ( '3d.polygon/1' @ V_Ps ) )
     => ( ( '3d.translate/2' @ ( '3d.polygon/1' @ V_Ps ) @ V_v )
        = ( '3d.polygon/1'
          @ ( 'map/2' @ '3d.Point' @ '3d.Point'
            @ ^ [V_p: '3d.Point'] :
                ( '3d.vec-translate/2' @ V_p @ V_v )
            @ V_Ps ) ) ) ) )).

%------------------------------------------------------------------------------------------
%----Axis of coordinates
%------------------------------------------------------------------------------------------
thf('3d.def-direction-of_axiom',axiom,(
    ! [V_v: '3d.Vector'] :
      ( ( '3d.direction-of/1' @ ( '3d.axis-along/1' @ V_v ) )
      = V_v ) )).

%-------------------------------------------------------------------------------
%----utlities
%-------------------------------------------------------------------------------
thf('3d.plane-shape/1_type',type,(
    '3d.plane-shape/1': '3d.Shape' > '3d.Shape' )).

thf('3d.plane-figure/1_type',type,(
    '3d.plane-figure/1': '3d.Shape' > '3d.Shape' )).

thf('3d.convex-polyhedron/1_type',type,(
    '3d.convex-polyhedron/1': '3d.Shape' > '3d.Shape' )).

thf('3d.solid-cone/1_type',type,(
    '3d.solid-cone/1': '3d.Shape' > '3d.Shape' )).

thf('3d.conical-surface-shape/1_type',type,(
    '3d.conical-surface-shape/1': '3d.Shape' > '3d.Shape' )).

thf('3d.solid-shape/1_type',type,(
    '3d.solid-shape/1': '3d.Shape' > '3d.Shape' )).

thf('3d.def_cpfun_to_cfun_3d_axiom',axiom,(
    ! [V_pf: ( '3d.Point' > $o )] :
      ( ( '3d.shape-of-cpfun/1' @ V_pf )
      = ( '3d.set-of-cfun/1'
        @ ^ [V_x: $real,V_y: $real,V_z: $real] :
            ( V_pf @ ( '3d.point/3' @ V_x @ V_y @ V_z ) ) ) ) )).

%-------------------------------------------------------------------------------
%----Coordinates
%-------------------------------------------------------------------------------
thf('3d.fun_x_coord_3d_axiom',axiom,(
    ! [V_x: $real,V_y: $real,V_z: $real] :
      ( ( '3d.x-coord/1' @ ( '3d.point/3' @ V_x @ V_y @ V_z ) )
      = V_x ) )).

thf('3d.fun_y_coord_3d_axiom',axiom,(
    ! [V_x: $real,V_y: $real,V_z: $real] :
      ( ( '3d.y-coord/1' @ ( '3d.point/3' @ V_x @ V_y @ V_z ) )
      = V_y ) )).

thf('3d.fun_z_coord_3d_axiom',axiom,(
    ! [V_x: $real,V_y: $real,V_z: $real] :
      ( ( '3d.z-coord/1' @ ( '3d.point/3' @ V_x @ V_y @ V_z ) )
      = V_z ) )).

thf('3d.def-coordinate-list-of-3d_axiom',axiom,(
    ! [V_x: $real,V_y: $real,V_z: $real] :
      ( ( '3d.coordinate-list-of/1' @ ( '3d.point/3' @ V_x @ V_y @ V_z ) )
      = ( 'cons/2' @ $real @ V_x @ ( 'cons/2' @ $real @ V_y @ ( 'cons/2' @ $real @ V_z @ ( 'nil/0' @ $real ) ) ) ) ) )).

thf('3d.fun_vec_x_coord_3d_axiom',axiom,(
    ! [V_x: $real,V_y: $real,V_z: $real] :
      ( ( '3d.vec-x-coord/1' @ ( '3d.vec3d/3' @ V_x @ V_y @ V_z ) )
      = V_x ) )).

thf('3d.fun_vec_y_coord_3d_axiom',axiom,(
    ! [V_x: $real,V_y: $real,V_z: $real] :
      ( ( '3d.vec-y-coord/1' @ ( '3d.vec3d/3' @ V_x @ V_y @ V_z ) )
      = V_y ) )).

thf('3d.fun_vec_z_coord_3d_axiom',axiom,(
    ! [V_x: $real,V_y: $real,V_z: $real] :
      ( ( '3d.vec-z-coord/1' @ ( '3d.vec3d/3' @ V_x @ V_y @ V_z ) )
      = V_z ) )).

thf('3d.def-component-list-of-3d_axiom',axiom,(
    ! [V_x: $real,V_y: $real,V_z: $real] :
      ( ( '3d.component-list-of/1' @ ( '3d.vec3d/3' @ V_x @ V_y @ V_z ) )
      = ( 'cons/2' @ $real @ V_x @ ( 'cons/2' @ $real @ V_y @ ( 'cons/2' @ $real @ V_z @ ( 'nil/0' @ $real ) ) ) ) ) )).

thf('3d.def_origin_3d_axiom',axiom,
    ( '3d.origin/0'
    = ( '3d.point/3' @ 0.0 @ 0.0 @ 0.0 ) )).

thf('3d.def_x_axis_3d_axiom',axiom,
    ( '3d.x-axis/0'
    = ( '3d.line/2' @ '3d.origin/0' @ ( '3d.point/3' @ 1.0 @ 0.0 @ 0.0 ) ) )).

thf('3d.def_y_axis_3d_axiom',axiom,
    ( '3d.y-axis/0'
    = ( '3d.line/2' @ '3d.origin/0' @ ( '3d.point/3' @ 0.0 @ 1.0 @ 0.0 ) ) )).

thf('3d.def_z_axis_3d_axiom',axiom,
    ( '3d.z-axis/0'
    = ( '3d.line/2' @ '3d.origin/0' @ ( '3d.point/3' @ 0.0 @ 0.0 @ 1.0 ) ) )).

%-------------------------------------------------------------------------------
%----Vectors
%-------------------------------------------------------------------------------
thf('3d.def_zero_vector_3d_axiom',axiom,
    ( '3d.zero-vector/0'
    = ( '3d.vec3d/3' @ 0.0 @ 0.0 @ 0.0 ) )).

thf('3d.def_vec_parallel_3d_axiom',axiom,(
    ! [V_v: '3d.Vector',V_w: '3d.Vector'] :
      ( ( '3d.vec-parallel/2' @ V_v @ V_w )
    <=> ( '3d.zero-vector/0'
        = ( '3d.outer-prod/2' @ V_v @ V_w ) ) ) )).

thf('3d.def_vec_axiom',axiom,(
    ! [V_px: $real,V_py: $real,V_pz: $real,V_qx: $real,V_qy: $real,V_qz: $real] :
      ( ( '3d.vec/2' @ ( '3d.point/3' @ V_px @ V_py @ V_pz ) @ ( '3d.point/3' @ V_qx @ V_qy @ V_qz ) )
      = ( '3d.vec3d/3' @ ( $difference @ V_qx @ V_px ) @ ( $difference @ V_qy @ V_py ) @ ( $difference @ V_qz @ V_pz ) ) ) )).

thf('3d.def_vector_to_point_3d_axiom',axiom,(
    ! [V_vx: $real,V_vy: $real,V_vz: $real] :
      ( ( '3d.vec->point/1' @ ( '3d.vec3d/3' @ V_vx @ V_vy @ V_vz ) )
      = ( '3d.point/3' @ V_vx @ V_vy @ V_vz ) ) )).

thf('3d.eq_point_axiom',axiom,(
    ! [V_px: $real,V_py: $real,V_pz: $real,V_qx: $real,V_qy: $real,V_qz: $real] :
      ( ( ( '3d.point/3' @ V_px @ V_py @ V_pz )
        = ( '3d.point/3' @ V_qx @ V_qy @ V_qz ) )
    <=> ( ( V_px = V_qx )
        & ( V_py = V_qy )
        & ( V_pz = V_qz ) ) ) )).

thf('3d.eq_vector_axiom',axiom,(
    ! [V_px: $real,V_py: $real,V_pz: $real,V_qx: $real,V_qy: $real,V_qz: $real] :
      ( ( ( '3d.vec3d/3' @ V_px @ V_py @ V_pz )
        = ( '3d.vec3d/3' @ V_qx @ V_qy @ V_qz ) )
    <=> ( ( V_px = V_qx )
        & ( V_py = V_qy )
        & ( V_pz = V_qz ) ) ) )).

thf('3d.def_vec_sum_axiom',axiom,(
    ! [V_px: $real,V_py: $real,V_pz: $real,V_qx: $real,V_qy: $real,V_qz: $real] :
      ( ( '3d.v+/2' @ ( '3d.vec3d/3' @ V_px @ V_py @ V_pz ) @ ( '3d.vec3d/3' @ V_qx @ V_qy @ V_qz ) )
      = ( '3d.vec3d/3' @ ( $sum @ V_px @ V_qx ) @ ( $sum @ V_py @ V_qy ) @ ( $sum @ V_pz @ V_qz ) ) ) )).

thf('3d.def_vec_diff_axiom',axiom,(
    ! [V_px: $real,V_py: $real,V_pz: $real,V_qx: $real,V_qy: $real,V_qz: $real] :
      ( ( '3d.v-/2' @ ( '3d.vec3d/3' @ V_px @ V_py @ V_pz ) @ ( '3d.vec3d/3' @ V_qx @ V_qy @ V_qz ) )
      = ( '3d.vec3d/3' @ ( $difference @ V_px @ V_qx ) @ ( $difference @ V_py @ V_qy ) @ ( $difference @ V_pz @ V_qz ) ) ) )).

thf('3d.def_scalar_vec_prod_axiom',axiom,(
    ! [V_a: $real,V_px: $real,V_py: $real,V_pz: $real] :
      ( ( '3d.sv*/2' @ V_a @ ( '3d.vec3d/3' @ V_px @ V_py @ V_pz ) )
      = ( '3d.vec3d/3' @ ( $product @ V_a @ V_px ) @ ( $product @ V_a @ V_py ) @ ( $product @ V_a @ V_pz ) ) ) )).

thf('3d.def_inner_prod_3d_axiom',axiom,(
    ! [V_px: $real,V_py: $real,V_pz: $real,V_qx: $real,V_qy: $real,V_qz: $real] :
      ( ( '3d.inner-prod/2' @ ( '3d.vec3d/3' @ V_px @ V_py @ V_pz ) @ ( '3d.vec3d/3' @ V_qx @ V_qy @ V_qz ) )
      = ( $sum @ ( $product @ V_px @ V_qx ) @ ( $sum @ ( $product @ V_py @ V_qy ) @ ( $product @ V_pz @ V_qz ) ) ) ) )).

thf('3d.def_outer_prod_3d_axiom',axiom,(
    ! [V_px: $real,V_py: $real,V_pz: $real,V_qx: $real,V_qy: $real,V_qz: $real] :
      ( ( '3d.outer-prod/2' @ ( '3d.vec3d/3' @ V_px @ V_py @ V_pz ) @ ( '3d.vec3d/3' @ V_qx @ V_qy @ V_qz ) )
      = ( '3d.vec3d/3' @ ( $difference @ ( $product @ V_py @ V_qz ) @ ( $product @ V_pz @ V_qy ) ) @ ( $difference @ ( $product @ V_pz @ V_qx ) @ ( $product @ V_px @ V_qz ) ) @ ( $difference @ ( $product @ V_px @ V_qy ) @ ( $product @ V_py @ V_qx ) ) ) ) )).

thf('3d.def_radius_3d_point_axiom',axiom,(
    ! [V_px: $real,V_py: $real,V_pz: $real] :
      ( ( '3d.radius/1' @ ( '3d.vec3d/3' @ V_px @ V_py @ V_pz ) )
      = ( 'sqrt/1' @ ( $sum @ ( '^/2' @ V_px @ 2.0 ) @ ( $sum @ ( '^/2' @ V_py @ 2.0 ) @ ( '^/2' @ V_pz @ 2.0 ) ) ) ) ) )).

thf('3d.def_square_radius_3d_point_axiom',axiom,(
    ! [V_px: $real,V_py: $real,V_pz: $real] :
      ( ( '3d.radius^2/1' @ ( '3d.vec3d/3' @ V_px @ V_py @ V_pz ) )
      = ( $sum @ ( '^/2' @ V_px @ 2.0 ) @ ( $sum @ ( '^/2' @ V_py @ 2.0 ) @ ( '^/2' @ V_pz @ 2.0 ) ) ) ) )).

%-------------------------------------------------------------------------------
%----3x3 Matrices
%-------------------------------------------------------------------------------
thf('3d.def_matrix_by_columns_axiom',axiom,(
    ! [V_a: $real,V_b: $real,V_c: $real,V_d: $real,V_e: $real,V_f: $real,V_g: $real,V_h: $real,V_i: $real] :
      ( ( '3d.matrix-by-columns/3' @ ( '3d.vec3d/3' @ V_a @ V_b @ V_c ) @ ( '3d.vec3d/3' @ V_d @ V_e @ V_f ) @ ( '3d.vec3d/3' @ V_g @ V_h @ V_i ) )
      = ( '3d.matrix/9' @ V_a @ V_d @ V_g @ V_b @ V_e @ V_h @ V_c @ V_f @ V_i ) ) )).

thf('3d.def_matrix_addtion_3x3_axiom',axiom,(
    ! [V_a: $real,V_b: $real,V_c: $real,V_d: $real,V_e: $real,V_f: $real,V_g: $real,V_h: $real,V_i: $real,V_A: $real,V_B: $real,V_C: $real,V_D: $real,V_E: $real,V_F: $real,V_G: $real,V_H: $real,V_I: $real] :
      ( ( '3d.m+/2' @ ( '3d.matrix/9' @ V_a @ V_b @ V_c @ V_d @ V_e @ V_f @ V_g @ V_h @ V_i ) @ ( '3d.matrix/9' @ V_A @ V_B @ V_C @ V_D @ V_E @ V_F @ V_G @ V_H @ V_I ) )
      = ( '3d.matrix/9' @ ( $sum @ V_a @ V_A ) @ ( $sum @ V_b @ V_B ) @ ( $sum @ V_c @ V_C ) @ ( $sum @ V_d @ V_D ) @ ( $sum @ V_e @ V_E ) @ ( $sum @ V_f @ V_F ) @ ( $sum @ V_g @ V_G ) @ ( $sum @ V_h @ V_H ) @ ( $sum @ V_i @ V_I ) ) ) )).

thf('3d.def_matrix_minus_3x3_axiom',axiom,(
    ! [V_a: $real,V_b: $real,V_c: $real,V_d: $real,V_e: $real,V_f: $real,V_g: $real,V_h: $real,V_i: $real,V_A: $real,V_B: $real,V_C: $real,V_D: $real,V_E: $real,V_F: $real,V_G: $real,V_H: $real,V_I: $real] :
      ( ( '3d.m-/2' @ ( '3d.matrix/9' @ V_a @ V_b @ V_c @ V_d @ V_e @ V_f @ V_g @ V_h @ V_i ) @ ( '3d.matrix/9' @ V_A @ V_B @ V_C @ V_D @ V_E @ V_F @ V_G @ V_H @ V_I ) )
      = ( '3d.matrix/9' @ ( $difference @ V_a @ V_A ) @ ( $difference @ V_b @ V_B ) @ ( $difference @ V_c @ V_C ) @ ( $difference @ V_d @ V_D ) @ ( $difference @ V_e @ V_E ) @ ( $difference @ V_f @ V_F ) @ ( $difference @ V_g @ V_G ) @ ( $difference @ V_h @ V_H ) @ ( $difference @ V_i @ V_I ) ) ) )).

thf('3d.def_matrix_negative_3x3_axiom',axiom,(
    ! [V_a: $real,V_b: $real,V_c: $real,V_d: $real,V_e: $real,V_f: $real,V_g: $real,V_h: $real,V_i: $real] :
      ( ( '3d.m-/1' @ ( '3d.matrix/9' @ V_a @ V_b @ V_c @ V_d @ V_e @ V_f @ V_g @ V_h @ V_i ) )
      = ( '3d.matrix/9' @ ( $uminus @ V_a ) @ ( $uminus @ V_b ) @ ( $uminus @ V_c ) @ ( $uminus @ V_d ) @ ( $uminus @ V_e ) @ ( $uminus @ V_f ) @ ( $uminus @ V_g ) @ ( $uminus @ V_h ) @ ( $uminus @ V_i ) ) ) )).

%----[a b c] [A B C]   [aA+bD+cG aB+bE+cH aC+bF+cI]
%----[d e f] [D E F] = [dA+eD+fG dB+eE+fH dC+eF+fI]
%----[g h i] [G H I]   [gA+hD+iG gB+hE+iH gC+hF+iI]
thf('3d.def_matrix_times_3x3_axiom',axiom,(
    ! [V_a: $real,V_b: $real,V_c: $real,V_d: $real,V_e: $real,V_f: $real,V_g: $real,V_h: $real,V_i: $real,V_A: $real,V_B: $real,V_C: $real,V_D: $real,V_E: $real,V_F: $real,V_G: $real,V_H: $real,V_I: $real] :
      ( ( '3d.m*/2' @ ( '3d.matrix/9' @ V_a @ V_b @ V_c @ V_d @ V_e @ V_f @ V_g @ V_h @ V_i ) @ ( '3d.matrix/9' @ V_A @ V_B @ V_C @ V_D @ V_E @ V_F @ V_G @ V_H @ V_I ) )
      = ( '3d.matrix/9' @ ( $sum @ ( $sum @ ( $product @ V_a @ V_A ) @ ( $product @ V_b @ V_D ) ) @ ( $product @ V_c @ V_G ) ) @ ( $sum @ ( $sum @ ( $product @ V_a @ V_B ) @ ( $product @ V_b @ V_E ) ) @ ( $product @ V_c @ V_H ) ) @ ( $sum @ ( $sum @ ( $product @ V_a @ V_C ) @ ( $product @ V_b @ V_F ) ) @ ( $product @ V_c @ V_I ) ) @ ( $sum @ ( $sum @ ( $product @ V_d @ V_A ) @ ( $product @ V_e @ V_D ) ) @ ( $product @ V_f @ V_G ) ) @ ( $sum @ ( $sum @ ( $product @ V_d @ V_B ) @ ( $product @ V_e @ V_E ) ) @ ( $product @ V_f @ V_H ) ) @ ( $sum @ ( $sum @ ( $product @ V_d @ V_C ) @ ( $product @ V_e @ V_F ) ) @ ( $product @ V_f @ V_I ) ) @ ( $sum @ ( $sum @ ( $product @ V_g @ V_A ) @ ( $product @ V_h @ V_D ) ) @ ( $product @ V_i @ V_G ) ) @ ( $sum @ ( $sum @ ( $product @ V_g @ V_B ) @ ( $product @ V_h @ V_E ) ) @ ( $product @ V_i @ V_H ) ) @ ( $sum @ ( $sum @ ( $product @ V_g @ V_C ) @ ( $product @ V_h @ V_F ) ) @ ( $product @ V_i @ V_I ) ) ) ) )).

thf('3d.def_matrix_scalar_mult_3x3_axiom',axiom,(
    ! [V_s: $real,V_a: $real,V_b: $real,V_c: $real,V_d: $real,V_e: $real,V_f: $real,V_g: $real,V_h: $real,V_i: $real] :
      ( ( '3d.sm*/2' @ V_s @ ( '3d.matrix/9' @ V_a @ V_b @ V_c @ V_d @ V_e @ V_f @ V_g @ V_h @ V_i ) )
      = ( '3d.matrix/9' @ ( $product @ V_s @ V_a ) @ ( $product @ V_s @ V_b ) @ ( $product @ V_s @ V_c ) @ ( $product @ V_s @ V_d ) @ ( $product @ V_s @ V_e ) @ ( $product @ V_s @ V_f ) @ ( $product @ V_s @ V_g ) @ ( $product @ V_s @ V_h ) @ ( $product @ V_s @ V_i ) ) ) )).

thf('3d.def_matrix_vec_mult_3x3_axiom',axiom,(
    ! [V_a: $real,V_b: $real,V_c: $real,V_d: $real,V_e: $real,V_f: $real,V_g: $real,V_h: $real,V_i: $real,V_x: $real,V_y: $real,V_z: $real] :
      ( ( '3d.mv*/2' @ ( '3d.matrix/9' @ V_a @ V_b @ V_c @ V_d @ V_e @ V_f @ V_g @ V_h @ V_i ) @ ( '3d.vec3d/3' @ V_x @ V_y @ V_z ) )
      = ( '3d.vec3d/3' @ ( $sum @ ( $sum @ ( $product @ V_a @ V_x ) @ ( $product @ V_b @ V_y ) ) @ ( $product @ V_c @ V_z ) ) @ ( $sum @ ( $sum @ ( $product @ V_d @ V_x ) @ ( $product @ V_e @ V_y ) ) @ ( $product @ V_f @ V_z ) ) @ ( $sum @ ( $sum @ ( $product @ V_g @ V_x ) @ ( $product @ V_h @ V_y ) ) @ ( $product @ V_i @ V_z ) ) ) ) )).

thf('3d.def_identity_matrix_3x3_axiom',axiom,
    ( '3d.identity-matrix/0'
    = ( '3d.matrix/9' @ 1.0 @ 0.0 @ 0.0 @ 0.0 @ 1.0 @ 0.0 @ 0.0 @ 0.0 @ 1.0 ) )).

thf('3d.def_zero_matrix_3x3_axiom',axiom,
    ( '3d.zero-matrix/0'
    = ( '3d.matrix/9' @ 0.0 @ 0.0 @ 0.0 @ 0.0 @ 0.0 @ 0.0 @ 0.0 @ 0.0 @ 0.0 ) )).

thf('3d.def_det_axiom',axiom,(
    ! [V_a: $real,V_b: $real,V_c: $real,V_d: $real,V_e: $real,V_f: $real,V_g: $real,V_h: $real,V_i: $real] :
      ( ( '3d.det/1' @ ( '3d.matrix/9' @ V_a @ V_b @ V_c @ V_d @ V_e @ V_f @ V_g @ V_h @ V_i ) )
      = ( 'sum/1' @ ( 'cons/2' @ $real @ ( $product @ ( $product @ V_a @ V_e ) @ V_i ) @ ( 'cons/2' @ $real @ ( $product @ ( $product @ V_b @ V_f ) @ V_g ) @ ( 'cons/2' @ $real @ ( $product @ ( $product @ V_c @ V_d ) @ V_h ) @ ( 'cons/2' @ $real @ ( $uminus @ ( $product @ ( $product @ V_c @ V_e ) @ V_g ) ) @ ( 'cons/2' @ $real @ ( $uminus @ ( $product @ ( $product @ V_b @ V_d ) @ V_i ) ) @ ( 'cons/2' @ $real @ ( $uminus @ ( $product @ ( $product @ V_a @ V_f ) @ V_h ) ) @ ( 'nil/0' @ $real ) ) ) ) ) ) ) ) ) )).

thf('3d.def_is_non_singular_axiom',axiom,(
    ! [V_a: $real,V_b: $real,V_c: $real,V_d: $real,V_e: $real,V_f: $real,V_g: $real,V_h: $real,V_i: $real] :
      ( ( '3d.is-non-singular/1' @ ( '3d.matrix/9' @ V_a @ V_b @ V_c @ V_d @ V_e @ V_f @ V_g @ V_h @ V_i ) )
    <=> ( 0.0
       != ( '3d.det/1' @ ( '3d.matrix/9' @ V_a @ V_b @ V_c @ V_d @ V_e @ V_f @ V_g @ V_h @ V_i ) ) ) ) )).

thf('3d.def_is_inverse_of_axiom',axiom,(
    ! [V_M: '3d.Matrix',V_N: '3d.Matrix'] :
      ( ( '3d.is-inverse-of/2' @ V_M @ V_N )
    <=> ( ( '3d.m*/2' @ V_M @ V_N )
        = '3d.identity-matrix/0' ) ) )).

thf('3d.def_matrix_equality_axiom',axiom,(
    ! [V_a: $real,V_b: $real,V_c: $real,V_d: $real,V_e: $real,V_f: $real,V_g: $real,V_h: $real,V_i: $real,V_A: $real,V_B: $real,V_C: $real,V_D: $real,V_E: $real,V_F: $real,V_G: $real,V_H: $real,V_I: $real] :
      ( ( ( '3d.matrix/9' @ V_a @ V_b @ V_c @ V_d @ V_e @ V_f @ V_g @ V_h @ V_i )
        = ( '3d.matrix/9' @ V_A @ V_B @ V_C @ V_D @ V_E @ V_F @ V_G @ V_H @ V_I ) )
    <=> ( ( V_a = V_A )
        & ( V_b = V_B )
        & ( V_c = V_C )
        & ( V_d = V_D )
        & ( V_e = V_E )
        & ( V_f = V_F )
        & ( V_g = V_G )
        & ( V_h = V_H )
        & ( V_i = V_I ) ) ) )).

thf('3d.def_transposed_matrix_axiom',axiom,(
    ! [V_a: $real,V_b: $real,V_c: $real,V_d: $real,V_e: $real,V_f: $real,V_g: $real,V_h: $real,V_i: $real] :
      ( ( '3d.transposed-matrix/1' @ ( '3d.matrix/9' @ V_a @ V_b @ V_c @ V_d @ V_e @ V_f @ V_g @ V_h @ V_i ) )
      = ( '3d.matrix/9' @ V_a @ V_d @ V_g @ V_b @ V_e @ V_h @ V_c @ V_f @ V_i ) ) )).

thf('3d.def_orthogonal_matrix_axiom',axiom,(
    ! [V_M: '3d.Matrix'] :
      ( ( '3d.is-orthogonal-matrix/1' @ V_M )
    <=> ( '3d.identity-matrix/0'
        = ( '3d.m*/2' @ V_M @ ( '3d.transposed-matrix/1' @ V_M ) ) ) ) )).

%-------------------------------------------------------------------------------
%----Operations & relations on geomtric figures
%-------------------------------------------------------------------------------
thf('3d.def_translate_general_3d_axiom',axiom,(
    ! [V_v: '3d.Vector',V_m: $real,V_s1: '3d.Shape',V_s2: '3d.Shape'] :
      ( ( '3d.translate/4' @ V_s1 @ V_v @ V_m @ V_s2 )
    <=> ( V_s2
        = ( '3d.shape-of-cpfun/1'
          @ ^ [V_p: '3d.Point'] :
              ( '3d.char-fun-of/1' @ V_s1 @ ( '3d.vec-translate/2' @ V_p @ ( '3d.sv*/2' @ ( $quotient @ V_m @ ( '3d.radius/1' @ V_v ) ) @ V_v ) ) ) ) ) ) )).

thf('3d.def_mat_shape*_line_axiom',axiom,(
    ! [V_q: '3d.Point',V_p: '3d.Point',V_M: '3d.Matrix'] :
      ( ( '3d.line-type/1' @ ( '3d.line/2' @ V_p @ V_q ) )
     => ( ( '3d.mat-shape*/2' @ V_M @ ( '3d.line/2' @ V_p @ V_q ) )
        = ( '3d.line/2' @ ( '3d.vec->point/1' @ ( '3d.mv*/2' @ V_M @ ( '3d.vec/2' @ '3d.origin/0' @ V_p ) ) ) @ ( '3d.vec->point/1' @ ( '3d.mv*/2' @ V_M @ ( '3d.vec/2' @ '3d.origin/0' @ V_q ) ) ) ) ) ) )).

thf('3d.def_mat_shape*_general_axiom',axiom,(
    ! [V_M: '3d.Matrix',V_S: '3d.Shape'] :
      ( ( '3d.mat-shape*/2' @ V_M @ V_S )
      = ( '3d.shape-of-cpfun/1'
        @ ^ [V_p: '3d.Point'] :
          ? [V_q: '3d.Point'] :
            ( ( '3d.on/2' @ V_q @ V_S )
            & ( V_p
              = ( '3d.vec->point/1' @ ( '3d.mv*/2' @ V_M @ ( '3d.vec/2' @ '3d.origin/0' @ V_q ) ) ) ) ) ) ) )).

thf('3d.def_congruent_3d_axiom',axiom,(
    ! [V_shape1: '3d.Shape',V_shape2: '3d.Shape'] :
      ( ( '3d.congruent/2' @ V_shape1 @ V_shape2 )
    <=> ? [V_a: $real,V_b: $real,V_c: $real,V_d: $real,V_e: $real,V_f: $real,V_g: $real,V_h: $real,V_i: $real,V_s: $real,V_t: $real,V_r: $real,V_u: $real] :
          ( ( '3d.is-inverse-of/2' @ ( '3d.matrix/9' @ V_a @ V_b @ V_c @ V_d @ V_e @ V_f @ V_g @ V_h @ V_i ) @ ( '3d.transposed-matrix/1' @ ( '3d.matrix/9' @ V_a @ V_b @ V_c @ V_d @ V_e @ V_f @ V_g @ V_h @ V_i ) ) )
          & ( '3d.translate/4' @ ( '3d.mat-shape*/2' @ ( '3d.matrix/9' @ V_a @ V_b @ V_c @ V_d @ V_e @ V_f @ V_g @ V_h @ V_i ) @ V_shape1 ) @ ( '3d.vec3d/3' @ V_s @ V_t @ V_r ) @ V_u @ V_shape2 ) ) ) )).

thf('3d.def_similar_3d_axiom',axiom,(
    ! [V_shape1: '3d.Shape',V_shape2: '3d.Shape'] :
      ( ( '3d.similar/2' @ V_shape1 @ V_shape2 )
    <=> ? [V_a: $real,V_b: $real,V_c: $real,V_d: $real,V_e: $real,V_f: $real,V_g: $real,V_h: $real,V_i: $real,V_s: $real,V_t: $real,V_r: $real,V_u: $real] :
          ( ( '3d.is-inverse-of/2' @ ( '3d.matrix/9' @ V_a @ V_b @ V_c @ V_d @ V_e @ V_f @ V_g @ V_h @ V_i ) @ ( '3d.transposed-matrix/1' @ ( '3d.matrix/9' @ V_a @ V_b @ V_c @ V_d @ V_e @ V_f @ V_g @ V_h @ V_i ) ) )
          & ( '3d.translate/4' @ ( '3d.mat-shape*/2' @ ( '3d.matrix/9' @ V_a @ V_b @ V_c @ V_d @ V_e @ V_f @ V_g @ V_h @ V_i ) @ V_shape1 ) @ ( '3d.vec3d/3' @ V_s @ V_t @ V_r ) @ V_u @ V_shape2 ) ) ) )).

%-------------------------------------------------------------------------------
%----Lines
%-------------------------------------------------------------------------------
thf('3d.line-type_axiom',axiom,(
    ! [V_l: '3d.Shape'] :
      ( ( '3d.line-type/1' @ V_l )
    <=> ? [V_Q: '3d.Point',V_P: '3d.Point'] :
          ( ( V_l
            = ( '3d.line/2' @ V_P @ V_Q ) )
          & ( V_P != V_Q ) ) ) )).

thf('3d.def_line3d_axiom',axiom,(
    ! [V_r: $real,V_q: $real,V_p: $real,V_c: $real,V_b: $real,V_a: $real] :
      ( ( '3d.line3d-type/1' @ ( '3d.line3d/6' @ V_a @ V_b @ V_c @ V_p @ V_q @ V_r ) )
     => ( ( '3d.line3d/6' @ V_a @ V_b @ V_c @ V_p @ V_q @ V_r )
        = ( '3d.line/2' @ ( '3d.point/3' @ V_p @ V_q @ V_r ) @ ( '3d.vec->point/1' @ ( '3d.v+/2' @ ( '3d.vec/2' @ '3d.origin/0' @ ( '3d.point/3' @ V_a @ V_b @ V_c ) ) @ ( '3d.vec/2' @ '3d.origin/0' @ ( '3d.point/3' @ V_p @ V_q @ V_r ) ) ) ) ) ) ) )).

thf('3d.line3d-type_axiom',axiom,(
    ! [V_L: '3d.Shape'] :
      ( ( '3d.line3d-type/1' @ V_L )
    <=> ? [V_f: $real,V_e: $real,V_d: $real,V_c: $real,V_b: $real,V_a: $real] :
          ( ( V_L
            = ( '3d.line3d/6' @ V_a @ V_b @ V_c @ V_d @ V_e @ V_f ) )
          & ~ ( ( V_a = 0.0 )
              & ( V_b = 0.0 )
              & ( V_c = 0.0 ) ) ) ) )).

thf('3d.def_line3d_eq_axiom',axiom,(
    ! [V_r2: $real,V_q2: $real,V_p2: $real,V_u2: $real,V_t2: $real,V_s2: $real,V_r1: $real,V_q1: $real,V_p1: $real,V_u1: $real,V_t1: $real,V_s1: $real] :
      ( ( ( '3d.line3d-type/1' @ ( '3d.line3d/6' @ V_s1 @ V_t1 @ V_u1 @ V_p1 @ V_q1 @ V_r1 ) )
        & ( '3d.line3d-type/1' @ ( '3d.line3d/6' @ V_s2 @ V_t2 @ V_u2 @ V_p2 @ V_q2 @ V_r2 ) ) )
     => ( ( ( '3d.line3d/6' @ V_s1 @ V_t1 @ V_u1 @ V_p1 @ V_q1 @ V_r1 )
          = ( '3d.line3d/6' @ V_s2 @ V_t2 @ V_u2 @ V_p2 @ V_q2 @ V_r2 ) )
      <=> ( ( ( '3d.vec3d/3' @ 0.0 @ 0.0 @ 0.0 )
            = ( '3d.outer-prod/2' @ ( '3d.vec3d/3' @ V_s1 @ V_t1 @ V_u1 ) @ ( '3d.vec3d/3' @ V_s2 @ V_t2 @ V_u2 ) ) )
          & ( ( '3d.vec3d/3' @ 0.0 @ 0.0 @ 0.0 )
            = ( '3d.outer-prod/2' @ ( '3d.vec3d/3' @ V_s1 @ V_t1 @ V_u1 ) @ ( '3d.v-/2' @ ( '3d.vec3d/3' @ V_p1 @ V_q1 @ V_r1 ) @ ( '3d.vec3d/3' @ V_p2 @ V_q2 @ V_r2 ) ) ) ) ) ) ) )).

thf('3d.def_line3d_eq_obj_axiom',axiom,(
    ! [V_obj: '3d.Shape',V_r: $real,V_q: $real,V_p: $real,V_u: $real,V_t: $real,V_s: $real] :
      ( ( '3d.line3d-type/1' @ ( '3d.line3d/6' @ V_s @ V_t @ V_u @ V_p @ V_q @ V_r ) )
     => ( ( ( '3d.line3d/6' @ V_s @ V_t @ V_u @ V_p @ V_q @ V_r )
          = V_obj )
      <=> ! [V_P: '3d.Point'] :
            ( ( '3d.on/2' @ V_P @ ( '3d.line3d/6' @ V_s @ V_t @ V_u @ V_p @ V_q @ V_r ) )
          <=> ( '3d.on/2' @ V_P @ V_obj ) ) ) ) )).

thf('3d.def_obj_eq_line3d_axiom',axiom,(
    ! [V_obj: '3d.Shape',V_r: $real,V_q: $real,V_p: $real,V_u: $real,V_t: $real,V_s: $real] :
      ( ( '3d.line3d-type/1' @ ( '3d.line3d/6' @ V_s @ V_t @ V_u @ V_p @ V_q @ V_r ) )
     => ( ( V_obj
          = ( '3d.line3d/6' @ V_s @ V_t @ V_u @ V_p @ V_q @ V_r ) )
      <=> ! [V_P: '3d.Point'] :
            ( ( '3d.on/2' @ V_P @ ( '3d.line3d/6' @ V_s @ V_t @ V_u @ V_p @ V_q @ V_r ) )
          <=> ( '3d.on/2' @ V_P @ V_obj ) ) ) ) )).

thf('3d.def_are_skew_lines_axiom',axiom,(
    ! [V_S: '3d.Point',V_R: '3d.Point',V_Q: '3d.Point',V_P: '3d.Point'] :
      ( ( ( '3d.line-type/1' @ ( '3d.line/2' @ V_P @ V_Q ) )
        & ( '3d.line-type/1' @ ( '3d.line/2' @ V_R @ V_S ) ) )
     => ( ( '3d.are-skew-lines/2' @ ( '3d.line/2' @ V_P @ V_Q ) @ ( '3d.line/2' @ V_R @ V_S ) )
      <=> ( '3d.is-tetrahedron/4' @ V_P @ V_Q @ V_R @ V_S ) ) ) )).

%-------------------------------------------------------------------------------
%----Planes
%-------------------------------------------------------------------------------
thf('3d.def_xy_plane_axiom',axiom,
    ( '3d.xy-plane/0'
    = ( '3d.plane1/3' @ '3d.origin/0' @ ( '3d.point/3' @ 1.0 @ 0.0 @ 0.0 ) @ ( '3d.point/3' @ 0.0 @ 1.0 @ 0.0 ) ) )).

thf('3d.def_yz_plane_axiom',axiom,
    ( '3d.yz-plane/0'
    = ( '3d.plane1/3' @ '3d.origin/0' @ ( '3d.point/3' @ 0.0 @ 1.0 @ 0.0 ) @ ( '3d.point/3' @ 0.0 @ 0.0 @ 1.0 ) ) )).

thf('3d.def_zx_plane_axiom',axiom,
    ( '3d.zx-plane/0'
    = ( '3d.plane1/3' @ '3d.origin/0' @ ( '3d.point/3' @ 1.0 @ 0.0 @ 0.0 ) @ ( '3d.point/3' @ 0.0 @ 0.0 @ 1.0 ) ) )).

thf('3d.plane-type_axiom',axiom,(
    ! [V_P: '3d.Shape'] :
      ( ( '3d.plane-type/1' @ V_P )
    <=> ? [V_v: $real,V_u: $real,V_t: $real,V_s: $real] :
          ( ( V_P
            = ( '3d.plane/4' @ V_s @ V_t @ V_u @ V_v ) )
          & ~ ( ( 0.0 = V_s )
              & ( 0.0 = V_t )
              & ( 0.0 = V_u ) ) ) ) )).

thf('3d.plane1-type_axiom',axiom,(
    ! [V_p: '3d.Shape'] :
      ( ( '3d.plane1-type/1' @ V_p )
    <=> ? [V_R: '3d.Point',V_Q: '3d.Point',V_P: '3d.Point'] :
          ( ( V_p
            = ( '3d.plane1/3' @ V_P @ V_Q @ V_R ) )
          & ( '3d.is-plane/3' @ V_P @ V_Q @ V_R ) ) ) )).

thf('3d.plane2-type_axiom',axiom,(
    ! [V_p: '3d.Shape'] :
      ( ( '3d.plane2-type/1' @ V_p )
    <=> ? [V_V: '3d.Vector',V_P: '3d.Point'] :
          ( ( V_p
            = ( '3d.plane2/2' @ V_P @ V_V ) )
          & ( V_V != '3d.zero-vector/0' ) ) ) )).

thf('3d.def_is_plane_by_three_points_axiom',axiom,(
    ! [V_P: '3d.Point',V_Q: '3d.Point',V_R: '3d.Point'] :
      ( ( '3d.is-plane/3' @ V_P @ V_Q @ V_R )
    <=> ~ ( '3d.colinear/3' @ V_P @ V_Q @ V_R ) ) )).

thf('3d.def_is_plane_by_point_normal_axiom',axiom,(
    ! [V_P: '3d.Point',V_V: '3d.Vector'] :
      ( ( '3d.is-plane/2' @ V_P @ V_V )
    <=> ( V_V != '3d.zero-vector/0' ) ) )).

thf('3d.def_plane_by_three_points_to_parametric_form_axiom',axiom,(
    ! [V_R: '3d.Point',V_Q: '3d.Point',V_P: '3d.Point'] :
      ( ( ( '3d.plane-type/1' @ ( '3d.plane/1' @ ( '3d.plane1/3' @ V_P @ V_Q @ V_R ) ) )
        & ( '3d.plane1-type/1' @ ( '3d.plane1/3' @ V_P @ V_Q @ V_R ) ) )
     => ( ( '3d.plane/1' @ ( '3d.plane1/3' @ V_P @ V_Q @ V_R ) )
        = ( '3d.plane/1' @ ( '3d.plane2/1' @ ( '3d.plane1/3' @ V_P @ V_Q @ V_R ) ) ) ) ) )).

thf('3d.def_plane_by_three_points_to_point_normal_axiom',axiom,(
    ! [V_R: '3d.Point',V_Q: '3d.Point',V_P: '3d.Point'] :
      ( ( ( '3d.plane2-type/1' @ ( '3d.plane2/1' @ ( '3d.plane1/3' @ V_P @ V_Q @ V_R ) ) )
        & ( '3d.plane1-type/1' @ ( '3d.plane1/3' @ V_P @ V_Q @ V_R ) ) )
     => ( ( '3d.plane2/1' @ ( '3d.plane1/3' @ V_P @ V_Q @ V_R ) )
        = ( '3d.plane2/2' @ V_P @ ( '3d.outer-prod/2' @ ( '3d.vec/2' @ V_P @ V_Q ) @ ( '3d.vec/2' @ V_P @ V_R ) ) ) ) ) )).

thf('3d.def_plane_by_point_normal_to_parametric_form_axiom',axiom,(
    ! [V_V: '3d.Vector',V_P: '3d.Point'] :
      ( ( ( '3d.plane-type/1' @ ( '3d.plane/1' @ ( '3d.plane2/2' @ V_P @ V_V ) ) )
        & ( '3d.plane2-type/1' @ ( '3d.plane2/2' @ V_P @ V_V ) ) )
     => ( ( '3d.plane/1' @ ( '3d.plane2/2' @ V_P @ V_V ) )
        = ( '3d.perpendicular-plane-including/2' @ V_P @ ( '3d.line/2' @ V_P @ ( '3d.vec-translate/2' @ V_P @ V_V ) ) ) ) ) )).

thf('3d.def_plane_equality1_axiom',axiom,(
    ! [V_V: '3d.Vector',V_B: '3d.Point',V_U: '3d.Vector',V_A: '3d.Point'] :
      ( ( ( '3d.plane2-type/1' @ ( '3d.plane2/2' @ V_A @ V_U ) )
        & ( '3d.plane2-type/1' @ ( '3d.plane2/2' @ V_B @ V_V ) ) )
     => ( ( ( '3d.plane2/2' @ V_A @ V_U )
          = ( '3d.plane2/2' @ V_B @ V_V ) )
      <=> ( ( '3d.vec-parallel/2' @ V_U @ V_V )
          & ( 0.0
            = ( '3d.inner-prod/2' @ V_U @ ( '3d.vec/2' @ V_A @ V_B ) ) ) ) ) ) )).

thf('3d.def_plane_equality2_axiom',axiom,(
    ! [V_v: $real,V_u: $real,V_t: $real,V_s: $real,V_d: $real,V_c: $real,V_b: $real,V_a: $real] :
      ( ( ( '3d.plane-type/1' @ ( '3d.plane/4' @ V_a @ V_b @ V_c @ V_d ) )
        & ( '3d.plane-type/1' @ ( '3d.plane/4' @ V_s @ V_t @ V_u @ V_v ) ) )
     => ( ( ( '3d.plane/4' @ V_a @ V_b @ V_c @ V_d )
          = ( '3d.plane/4' @ V_s @ V_t @ V_u @ V_v ) )
      <=> ( ( '3d.vec-parallel/2' @ ( '3d.vec3d/3' @ V_a @ V_b @ V_c ) @ ( '3d.vec3d/3' @ V_s @ V_t @ V_u ) )
          & ( '3d.zero-vector/0'
            = ( '3d.v-/2' @ ( '3d.sv*/2' @ V_d @ ( '3d.vec3d/3' @ V_s @ V_t @ V_u ) ) @ ( '3d.sv*/2' @ V_v @ ( '3d.vec3d/3' @ V_a @ V_b @ V_c ) ) ) ) ) ) ) )).

thf('3d.def_plane_equality3_axiom',axiom,(
    ! [V_plane: '3d.Shape',V_C: '3d.Point',V_B: '3d.Point',V_A: '3d.Point'] :
      ( ( '3d.plane1-type/1' @ ( '3d.plane1/3' @ V_A @ V_B @ V_C ) )
     => ( ( ( '3d.plane1/3' @ V_A @ V_B @ V_C )
          = V_plane )
      <=> ( ( '3d.plane2/1' @ ( '3d.plane1/3' @ V_A @ V_B @ V_C ) )
          = V_plane ) ) ) )).

thf('3d.def_plane_equality4_1_axiom',axiom,(
    ! [V_R: '3d.Point',V_Q: '3d.Point',V_P: '3d.Point',V_v: $real,V_u: $real,V_t: $real,V_s: $real] :
      ( ( ( '3d.plane-type/1' @ ( '3d.plane/4' @ V_s @ V_t @ V_u @ V_v ) )
        & ( '3d.plane1-type/1' @ ( '3d.plane1/3' @ V_P @ V_Q @ V_R ) ) )
     => ( ( ( '3d.plane/4' @ V_s @ V_t @ V_u @ V_v )
          = ( '3d.plane1/3' @ V_P @ V_Q @ V_R ) )
      <=> ( ( '3d.plane/4' @ V_s @ V_t @ V_u @ V_v )
          = ( '3d.plane/1' @ ( '3d.plane1/3' @ V_P @ V_Q @ V_R ) ) ) ) ) )).

thf('3d.def_plane_equality4_2_axiom',axiom,(
    ! [V_n: '3d.Vector',V_P: '3d.Point',V_v: $real,V_u: $real,V_t: $real,V_s: $real] :
      ( ( ( '3d.plane-type/1' @ ( '3d.plane/4' @ V_s @ V_t @ V_u @ V_v ) )
        & ( '3d.plane2-type/1' @ ( '3d.plane2/2' @ V_P @ V_n ) ) )
     => ( ( ( '3d.plane/4' @ V_s @ V_t @ V_u @ V_v )
          = ( '3d.plane2/2' @ V_P @ V_n ) )
      <=> ( ( '3d.plane/4' @ V_s @ V_t @ V_u @ V_v )
          = ( '3d.plane/1' @ ( '3d.plane2/2' @ V_P @ V_n ) ) ) ) ) )).

thf('3d.def_plane_equality4_3_axiom',axiom,(
    ! [V_R: '3d.Point',V_Q: '3d.Point',V_P: '3d.Point',V_v: $real,V_u: $real,V_t: $real,V_s: $real] :
      ( ( ( '3d.plane-type/1' @ ( '3d.plane/4' @ V_s @ V_t @ V_u @ V_v ) )
        & ( '3d.plane2-type/1' @ ( '3d.plane2/1' @ ( '3d.plane1/3' @ V_P @ V_Q @ V_R ) ) )
        & ( '3d.plane1-type/1' @ ( '3d.plane1/3' @ V_P @ V_Q @ V_R ) ) )
     => ( ( ( '3d.plane/4' @ V_s @ V_t @ V_u @ V_v )
          = ( '3d.plane2/1' @ ( '3d.plane1/3' @ V_P @ V_Q @ V_R ) ) )
      <=> ( ( '3d.plane/4' @ V_s @ V_t @ V_u @ V_v )
          = ( '3d.plane/1' @ ( '3d.plane1/3' @ V_P @ V_Q @ V_R ) ) ) ) ) )).

thf('3d.def_plane_equality5_axiom',axiom,(
    ! [V_q: '3d.Shape',V_V: '3d.Vector',V_P: '3d.Point'] :
      ( ( '3d.plane2-type/1' @ ( '3d.plane2/2' @ V_P @ V_V ) )
     => ( ( ( '3d.plane2/2' @ V_P @ V_V )
          = V_q )
      <=> ( V_q
          = ( '3d.plane2/2' @ V_P @ V_V ) ) ) ) )).

thf('3d.def_determine_plane_by_three_points_axiom',axiom,(
    ! [V_v: $real,V_u: $real,V_t: $real,V_s: $real,V_r: '3d.Point',V_q: '3d.Point',V_p: '3d.Point'] :
      ( ( '3d.plane-type/1' @ ( '3d.plane/4' @ V_s @ V_t @ V_u @ V_v ) )
     => ( ( '3d.determine/2' @ ( 'cons/2' @ '3d.Point' @ V_p @ ( 'cons/2' @ '3d.Point' @ V_q @ ( 'cons/2' @ '3d.Point' @ V_r @ ( 'nil/0' @ '3d.Point' ) ) ) ) @ ( '3d.plane/4' @ V_s @ V_t @ V_u @ V_v ) )
      <=> ( ( '3d.is-triangle/3' @ V_p @ V_q @ V_r )
          & ( V_s
            = ( '3d.vec-x-coord/1' @ ( '3d.outer-prod/2' @ ( '3d.vec/2' @ V_p @ V_q ) @ ( '3d.vec/2' @ V_p @ V_r ) ) ) )
          & ( V_t
            = ( '3d.vec-y-coord/1' @ ( '3d.outer-prod/2' @ ( '3d.vec/2' @ V_p @ V_q ) @ ( '3d.vec/2' @ V_p @ V_r ) ) ) )
          & ( V_u
            = ( '3d.vec-z-coord/1' @ ( '3d.outer-prod/2' @ ( '3d.vec/2' @ V_p @ V_q ) @ ( '3d.vec/2' @ V_p @ V_r ) ) ) )
          & ( V_v
            = ( '3d.inner-prod/2' @ ( '3d.vec/2' @ '3d.origin/0' @ V_p ) @ ( '3d.outer-prod/2' @ ( '3d.vec/2' @ V_p @ V_q ) @ ( '3d.vec/2' @ V_p @ V_r ) ) ) ) ) ) ) )).

thf('3d.def_is_normal_vector_of_plane_shape_axiom',axiom,(
    ! [V_v: '3d.Vector',V_plane: '3d.Shape'] :
      ( ( '3d.is-normal-vector-of/2' @ V_v @ ( '3d.plane-shape/1' @ V_plane ) )
    <=> ( ( V_v != '3d.zero-vector/0' )
        & ( '3d.perpendicular/2' @ ( '3d.line/2' @ '3d.origin/0' @ ( '3d.point/3' @ ( '3d.vec-x-coord/1' @ V_v ) @ ( '3d.vec-y-coord/1' @ V_v ) @ ( '3d.vec-z-coord/1' @ V_v ) ) ) @ ( '3d.plane-shape/1' @ V_plane ) ) ) ) )).

thf('3d.def_is_normal_vector_of_plane_axiom',axiom,(
    ! [V_d: $real,V_c: $real,V_b: $real,V_a: $real,V_v: '3d.Vector'] :
      ( ( '3d.plane-type/1' @ ( '3d.plane/4' @ V_a @ V_b @ V_c @ V_d ) )
     => ( ( '3d.is-normal-vector-of/2' @ V_v @ ( '3d.plane/4' @ V_a @ V_b @ V_c @ V_d ) )
      <=> ( '3d.is-normal-vector-of/2' @ V_v @ ( '3d.plane-shape/1' @ ( '3d.plane/4' @ V_a @ V_b @ V_c @ V_d ) ) ) ) ) )).

thf('3d.def_is_normal_vector_of_plane1_axiom',axiom,(
    ! [V_R: '3d.Point',V_Q: '3d.Point',V_P: '3d.Point',V_v: '3d.Vector'] :
      ( ( '3d.plane1-type/1' @ ( '3d.plane1/3' @ V_P @ V_Q @ V_R ) )
     => ( ( '3d.is-normal-vector-of/2' @ V_v @ ( '3d.plane1/3' @ V_P @ V_Q @ V_R ) )
      <=> ( '3d.is-normal-vector-of/2' @ V_v @ ( '3d.plane-shape/1' @ ( '3d.plane1/3' @ V_P @ V_Q @ V_R ) ) ) ) ) )).

thf('3d.def_is_normal_vector_of_plane2_axiom',axiom,(
    ! [V_V: '3d.Vector',V_P: '3d.Point',V_v: '3d.Vector'] :
      ( ( '3d.plane2-type/1' @ ( '3d.plane2/2' @ V_P @ V_V ) )
     => ( ( '3d.is-normal-vector-of/2' @ V_v @ ( '3d.plane2/2' @ V_P @ V_V ) )
      <=> ( '3d.is-normal-vector-of/2' @ V_v @ ( '3d.plane-shape/1' @ ( '3d.plane2/2' @ V_P @ V_V ) ) ) ) ) )).

thf('3d.def_normal_vector_of_general_call_axiom',axiom,(
    ! [V_p: '3d.Shape'] :
      ( ( '3d.normal-vector-of/1' @ ( '3d.plane-shape/1' @ V_p ) )
      = ( '3d.normal-vector-of/1' @ V_p ) ) )).

thf('3d.def_normal_vector_of_parametric_form_plane_axiom',axiom,(
    ! [V_v: $real,V_u: $real,V_t: $real,V_s: $real] :
      ( ( '3d.plane-type/1' @ ( '3d.plane/4' @ V_s @ V_t @ V_u @ V_v ) )
     => ( ( '3d.normal-vector-of/1' @ ( '3d.plane/4' @ V_s @ V_t @ V_u @ V_v ) )
        = ( '3d.vec3d/3' @ V_s @ V_t @ V_u ) ) ) )).

thf('3d.def_normal_vector_of_plane_by_three_points_axiom',axiom,(
    ! [V_R: '3d.Point',V_Q: '3d.Point',V_P: '3d.Point'] :
      ( ( '3d.plane1-type/1' @ ( '3d.plane1/3' @ V_P @ V_Q @ V_R ) )
     => ( ( '3d.normal-vector-of/1' @ ( '3d.plane1/3' @ V_P @ V_Q @ V_R ) )
        = ( '3d.outer-prod/2' @ ( '3d.vec/2' @ V_P @ V_Q ) @ ( '3d.vec/2' @ V_P @ V_R ) ) ) ) )).

thf('3d.def_normal_vector_of_plane_by_point_normal_axiom',axiom,(
    ! [V_V: '3d.Vector',V_P: '3d.Point'] :
      ( ( '3d.plane2-type/1' @ ( '3d.plane2/2' @ V_P @ V_V ) )
     => ( ( '3d.normal-vector-of/1' @ ( '3d.plane2/2' @ V_P @ V_V ) )
        = V_V ) ) )).

thf('3d.def_normal_vector_to_plane_axiom',axiom,(
    ! [V_point: '3d.Point',V_v: $real,V_u: $real,V_t: $real,V_s: $real] :
      ( ( '3d.plane-type/1' @ ( '3d.plane/4' @ V_s @ V_t @ V_u @ V_v ) )
     => ( ( '3d.normal-vector-to/2' @ ( '3d.plane/4' @ V_s @ V_t @ V_u @ V_v ) @ V_point )
        = ( '3d.sv*/2' @ ( $quotient @ ( $sum @ ( '3d.inner-prod/2' @ ( '3d.vec3d/3' @ ( '3d.x-coord/1' @ V_point ) @ ( '3d.y-coord/1' @ V_point ) @ ( '3d.z-coord/1' @ V_point ) ) @ ( '3d.vec3d/3' @ V_s @ V_t @ V_u ) ) @ ( $uminus @ V_v ) ) @ ( '3d.radius^2/1' @ ( '3d.vec3d/3' @ V_s @ V_t @ V_u ) ) ) @ ( '3d.vec3d/3' @ V_s @ V_t @ V_u ) ) ) ) )).

thf('3d.def_normal_vector_to_plane_shape_axiom',axiom,(
    ! [V_plane: '3d.Shape',V_point: '3d.Point'] :
      ( ( '3d.normal-vector-to/2' @ ( '3d.plane-shape/1' @ V_plane ) @ V_point )
      = ( '3d.sv*/2' @ ( $quotient @ 1.0 @ ( '3d.radius^2/1' @ ( '3d.normal-vector-of/1' @ V_plane ) ) ) @ ( '3d.sv*/2' @ ( '3d.inner-prod/2' @ ( '3d.normal-vector-of/1' @ V_plane ) @ ( '3d.vec/2' @ ( '3d.a-point-on/1' @ V_plane ) @ V_point ) ) @ ( '3d.normal-vector-of/1' @ V_plane ) ) ) ) )).

thf('3d.def_normal_vector_to_plane1_axiom',axiom,(
    ! [V_point: '3d.Point',V_R: '3d.Point',V_Q: '3d.Point',V_P: '3d.Point'] :
      ( ( '3d.plane1-type/1' @ ( '3d.plane1/3' @ V_P @ V_Q @ V_R ) )
     => ( ( '3d.normal-vector-to/2' @ ( '3d.plane1/3' @ V_P @ V_Q @ V_R ) @ V_point )
        = ( '3d.normal-vector-to/2' @ ( '3d.plane-shape/1' @ ( '3d.plane1/3' @ V_P @ V_Q @ V_R ) ) @ V_point ) ) ) )).

thf('3d.def_normal_vector_to_plane2_axiom',axiom,(
    ! [V_point: '3d.Point',V_V: '3d.Vector',V_P: '3d.Point'] :
      ( ( '3d.plane2-type/1' @ ( '3d.plane2/2' @ V_P @ V_V ) )
     => ( ( '3d.normal-vector-to/2' @ ( '3d.plane2/2' @ V_P @ V_V ) @ V_point )
        = ( '3d.normal-vector-to/2' @ ( '3d.plane-shape/1' @ ( '3d.plane2/2' @ V_P @ V_V ) ) @ V_point ) ) ) )).

thf('3d.def_a_point_on_parametric_form_plane_axiom',axiom,(
    ! [V_v: $real,V_u: $real,V_t: $real,V_s: $real] :
      ( ( '3d.plane-type/1' @ ( '3d.plane/4' @ V_s @ V_t @ V_u @ V_v ) )
     => ( ( '3d.a-point-on/1' @ ( '3d.plane/4' @ V_s @ V_t @ V_u @ V_v ) )
        = ( '3d.vec->point/1' @ ( '3d.sv*/2' @ ( $quotient @ V_v @ ( '3d.radius^2/1' @ ( '3d.vec3d/3' @ V_s @ V_t @ V_u ) ) ) @ ( '3d.vec3d/3' @ V_s @ V_t @ V_u ) ) ) ) ) )).

thf('3d.def_a_point_on_plane_by_three_points_axiom',axiom,(
    ! [V_R: '3d.Point',V_Q: '3d.Point',V_P: '3d.Point'] :
      ( ( '3d.plane1-type/1' @ ( '3d.plane1/3' @ V_P @ V_Q @ V_R ) )
     => ( ( '3d.a-point-on/1' @ ( '3d.plane1/3' @ V_P @ V_Q @ V_R ) )
        = ( '3d.a-point-on/1' @ ( '3d.plane/1' @ ( '3d.plane1/3' @ V_P @ V_Q @ V_R ) ) ) ) ) )).

thf('3d.def_a_point_on_plane_by_point_normal_axiom',axiom,(
    ! [V_V: '3d.Vector',V_P: '3d.Point'] :
      ( ( '3d.plane2-type/1' @ ( '3d.plane2/2' @ V_P @ V_V ) )
     => ( ( '3d.a-point-on/1' @ ( '3d.plane2/2' @ V_P @ V_V ) )
        = ( '3d.a-point-on/1' @ ( '3d.plane/1' @ ( '3d.plane2/2' @ V_P @ V_V ) ) ) ) ) )).

thf('3d.def_perpendicular_plane_including_axiom',axiom,(
    ! [V_R: '3d.Point',V_Q: '3d.Point',V_P: '3d.Point'] :
      ( ( '3d.line-type/1' @ ( '3d.line/2' @ V_P @ V_Q ) )
     => ( ( '3d.perpendicular-plane-including/2' @ V_R @ ( '3d.line/2' @ V_P @ V_Q ) )
        = ( '3d.plane/4' @ ( '3d.vec-x-coord/1' @ ( '3d.vec/2' @ V_P @ V_Q ) ) @ ( '3d.vec-y-coord/1' @ ( '3d.vec/2' @ V_P @ V_Q ) ) @ ( '3d.vec-z-coord/1' @ ( '3d.vec/2' @ V_P @ V_Q ) ) @ ( '3d.inner-prod/2' @ ( '3d.vec/2' @ '3d.origin/0' @ V_R ) @ ( '3d.vec/2' @ V_P @ V_Q ) ) ) ) ) )).

thf('3d.def_extend_triangle_to_plane_axiom',axiom,(
    ! [V_C: '3d.Point',V_B: '3d.Point',V_A: '3d.Point'] :
      ( ( '3d.triangle-type/1' @ ( '3d.triangle/3' @ V_A @ V_B @ V_C ) )
     => ( ( '3d.extend-to-plane/1' @ ( '3d.triangle/3' @ V_A @ V_B @ V_C ) )
        = ( '3d.plane1/3' @ V_A @ V_B @ V_C ) ) ) )).

thf('3d.def_extend_square_to_plane_axiom',axiom,(
    ! [V_D: '3d.Point',V_C: '3d.Point',V_B: '3d.Point',V_A: '3d.Point'] :
      ( ( '3d.square-type/1' @ ( '3d.square/4' @ V_A @ V_B @ V_C @ V_D ) )
     => ( ( '3d.extend-to-plane/1' @ ( '3d.square/4' @ V_A @ V_B @ V_C @ V_D ) )
        = ( '3d.plane1/3' @ V_A @ V_B @ V_C ) ) ) )).

thf('3d.def_extend_polygon_to_plane_axiom',axiom,(
    ! [V_ps: ( 'ListOf' @ '3d.Point' ),V_C: '3d.Point',V_B: '3d.Point',V_A: '3d.Point'] :
      ( ( '3d.polygon-type/1' @ ( '3d.polygon/1' @ ( 'cons/2' @ '3d.Point' @ V_A @ ( 'cons/2' @ '3d.Point' @ V_B @ ( 'cons/2' @ '3d.Point' @ V_C @ V_ps ) ) ) ) )
     => ( ( '3d.extend-to-plane/1' @ ( '3d.polygon/1' @ ( 'cons/2' @ '3d.Point' @ V_A @ ( 'cons/2' @ '3d.Point' @ V_B @ ( 'cons/2' @ '3d.Point' @ V_C @ V_ps ) ) ) ) )
        = ( '3d.plane1/3' @ V_A @ V_B @ V_C ) ) ) )).

thf('3d.def_extend_circle_to_plane_axiom',axiom,(
    ! [V_n: '3d.Vector',V_r: $real,V_c: '3d.Point'] :
      ( ( '3d.circle-type/1' @ ( '3d.circle/3' @ V_c @ V_r @ V_n ) )
     => ( ( '3d.extend-to-plane/1' @ ( '3d.circle/3' @ V_c @ V_r @ V_n ) )
        = ( '3d.plane2/2' @ V_c @ V_n ) ) ) )).

thf('3d.def_extend_disk_to_plane_axiom',axiom,(
    ! [V_n: '3d.Vector',V_r: $real,V_c: '3d.Point'] :
      ( ( '3d.disk-type/1' @ ( '3d.disk/3' @ V_c @ V_r @ V_n ) )
     => ( ( '3d.extend-to-plane/1' @ ( '3d.disk/3' @ V_c @ V_r @ V_n ) )
        = ( '3d.plane2/2' @ V_c @ V_n ) ) ) )).

thf('3d.def_extend_arc_to_plane_axiom',axiom,(
    ! [V_n: '3d.Vector',V_a: $real,V_p: '3d.Point',V_c: '3d.Point'] :
      ( ( '3d.arc-type/1' @ ( '3d.arc/4' @ V_c @ V_p @ V_a @ V_n ) )
     => ( ( '3d.extend-to-plane/1' @ ( '3d.arc/4' @ V_c @ V_p @ V_a @ V_n ) )
        = ( '3d.plane2/2' @ V_c @ V_n ) ) ) )).

thf('3d.def_extend_arc_by_three_points_to_plane_axiom',axiom,(
    ! [V_c: '3d.Point',V_p: '3d.Point',V_q: '3d.Point'] :
      ( ( '3d.extend-to-plane/1' @ ( '3d.arc/3' @ V_c @ V_p @ V_q ) )
      = ( '3d.plane1/3' @ V_c @ V_p @ V_q ) ) )).

thf('3d.def_extend_major_arc_by_three_points_to_plane_axiom',axiom,(
    ! [V_c: '3d.Point',V_p: '3d.Point',V_q: '3d.Point'] :
      ( ( '3d.extend-to-plane/1' @ ( '3d.major-arc/1' @ ( '3d.arc/3' @ V_c @ V_p @ V_q ) ) )
      = ( '3d.extend-to-plane/1' @ ( '3d.arc/3' @ V_c @ V_p @ V_q ) ) ) )).

thf('3d.def_extend_minor_arc_by_three_points_to_plane_axiom',axiom,(
    ! [V_c: '3d.Point',V_p: '3d.Point',V_q: '3d.Point'] :
      ( ( '3d.extend-to-plane/1' @ ( '3d.minor-arc/1' @ ( '3d.arc/3' @ V_c @ V_p @ V_q ) ) )
      = ( '3d.extend-to-plane/1' @ ( '3d.arc/3' @ V_c @ V_p @ V_q ) ) ) )).

thf('3d.def_extend_circular_sector_to_plane_axiom',axiom,(
    ! [V_n: '3d.Vector',V_a: $real,V_p: '3d.Point',V_c: '3d.Point'] :
      ( ( '3d.circular-sector-type/1' @ ( '3d.circular-sector/4' @ V_c @ V_p @ V_a @ V_n ) )
     => ( ( '3d.extend-to-plane/1' @ ( '3d.circular-sector/4' @ V_c @ V_p @ V_a @ V_n ) )
        = ( '3d.plane2/2' @ V_c @ V_n ) ) ) )).

thf('3d.def_foot_of_perpendicular_line_from_to_axiom',axiom,(
    ! [V_point: '3d.Point',V_plane: '3d.Shape'] :
      ( ( '3d.foot-of-perpendicular-line-from-to/2' @ V_point @ V_plane )
      = ( '3d.vec->point/1' @ ( '3d.v-/2' @ ( '3d.vec/2' @ '3d.origin/0' @ V_point ) @ ( '3d.normal-vector-to/2' @ V_plane @ V_point ) ) ) ) )).

thf('3d.def_plane_symmetry_point_axiom',axiom,(
    ! [V_P: '3d.Point',V_Q: '3d.Point',V_H: '3d.Shape'] :
      ( ( '3d.plane-symmetry/3' @ V_P @ V_Q @ V_H )
    <=> ( ( '3d.on/2' @ ( '3d.midpoint-of/2' @ V_P @ V_Q ) @ V_H )
        & ( '3d.perpendicular/2' @ ( '3d.line/2' @ V_P @ V_Q ) @ V_H ) ) ) )).

%-------------------------------------------------------------------------------
%----Angle between lines and planes
%-------------------------------------------------------------------------------
thf('3d.def_cos_of_angle_line_plane_axiom',axiom,(
    ! [V_P: '3d.Shape',V_b: '3d.Point',V_a: '3d.Point'] :
      ( ( '3d.line-type/1' @ ( '3d.line/2' @ V_a @ V_b ) )
     => ( ( '3d.cos-of-angle/1' @ ( '3d.formed-angle-of/2' @ ( '3d.line/2' @ V_a @ V_b ) @ ( '3d.plane-shape/1' @ V_P ) ) )
        = ( '3d.sin-of-angle/1' @ ( '3d.angle-of-vectors/2' @ ( '3d.vec/2' @ V_a @ V_b ) @ ( '3d.normal-vector-of/1' @ V_P ) ) ) ) ) )).

thf('3d.def_cos_of_angle_planes_axiom',axiom,(
    ! [V_P1: '3d.Shape',V_P2: '3d.Shape'] :
      ( ( '3d.cos-of-angle/1' @ ( '3d.formed-angle-of/2' @ ( '3d.plane-shape/1' @ V_P1 ) @ ( '3d.plane-shape/1' @ V_P2 ) ) )
      = ( 'max/2' @ ( '3d.cos-of-angle/1' @ ( '3d.angle-of-vectors/2' @ ( '3d.normal-vector-of/1' @ V_P1 ) @ ( '3d.normal-vector-of/1' @ V_P2 ) ) ) @ ( '3d.cos-of-angle/1' @ ( '3d.angle-of-vectors/2' @ ( '3d.sv*/2' @ -1.0 @ ( '3d.normal-vector-of/1' @ V_P1 ) ) @ ( '3d.normal-vector-of/1' @ V_P2 ) ) ) ) ) )).

thf('3d.def_cos_of_angle_plane_axiom',axiom,(
    ! [V_v: $real,V_u: $real,V_t: $real,V_s: $real,V_S: '3d.Shape'] :
      ( ( '3d.plane-type/1' @ ( '3d.plane/4' @ V_s @ V_t @ V_u @ V_v ) )
     => ( ( '3d.cos-of-angle/1' @ ( '3d.formed-angle-of/2' @ V_S @ ( '3d.plane/4' @ V_s @ V_t @ V_u @ V_v ) ) )
        = ( '3d.cos-of-angle/1' @ ( '3d.formed-angle-of/2' @ V_S @ ( '3d.plane-shape/1' @ ( '3d.plane/4' @ V_s @ V_t @ V_u @ V_v ) ) ) ) ) ) )).

thf('3d.def_cos_of_angle_plane1_axiom',axiom,(
    ! [V_R: '3d.Point',V_Q: '3d.Point',V_P: '3d.Point',V_S: '3d.Shape'] :
      ( ( '3d.plane1-type/1' @ ( '3d.plane1/3' @ V_P @ V_Q @ V_R ) )
     => ( ( '3d.cos-of-angle/1' @ ( '3d.formed-angle-of/2' @ V_S @ ( '3d.plane1/3' @ V_P @ V_Q @ V_R ) ) )
        = ( '3d.cos-of-angle/1' @ ( '3d.formed-angle-of/2' @ V_S @ ( '3d.plane-shape/1' @ ( '3d.plane1/3' @ V_P @ V_Q @ V_R ) ) ) ) ) ) )).

thf('3d.def_cos_of_angle_plane2_axiom',axiom,(
    ! [V_V: '3d.Vector',V_P: '3d.Point',V_S: '3d.Shape'] :
      ( ( '3d.plane2-type/1' @ ( '3d.plane2/2' @ V_P @ V_V ) )
     => ( ( '3d.cos-of-angle/1' @ ( '3d.formed-angle-of/2' @ V_S @ ( '3d.plane2/2' @ V_P @ V_V ) ) )
        = ( '3d.cos-of-angle/1' @ ( '3d.formed-angle-of/2' @ V_S @ ( '3d.plane-shape/1' @ ( '3d.plane2/2' @ V_P @ V_V ) ) ) ) ) ) )).

thf('3d.def_cos_of_angle_symmetry_axiom',axiom,(
    ! [V_S: '3d.Shape',V_P: '3d.Shape'] :
      ( ( '3d.cos-of-angle/1' @ ( '3d.formed-angle-of/2' @ V_S @ ( '3d.plane-shape/1' @ V_P ) ) )
      = ( '3d.cos-of-angle/1' @ ( '3d.formed-angle-of/2' @ ( '3d.plane-shape/1' @ V_P ) @ V_S ) ) ) )).

%-------------------------------------------------------------------------------
%----Parallelism between planes and their subsets
%-------------------------------------------------------------------------------
thf('3d.def_plane_parallel_implement_axiom',axiom,(
    ! [V_p: '3d.Shape',V_q: '3d.Shape'] :
      ( ( '3d.parallel/2' @ ( '3d.plane-shape/1' @ V_p ) @ ( '3d.plane-shape/1' @ V_q ) )
    <=> ( '3d.vec-parallel/2' @ ( '3d.normal-vector-of/1' @ ( '3d.plane-shape/1' @ V_p ) ) @ ( '3d.normal-vector-of/1' @ ( '3d.plane-shape/1' @ V_q ) ) ) ) )).

thf('3d.def_plane_parallel1_axiom',axiom,(
    ! [V_q: '3d.Shape',V_C: '3d.Point',V_B: '3d.Point',V_A: '3d.Point'] :
      ( ( '3d.plane1-type/1' @ ( '3d.plane1/3' @ V_A @ V_B @ V_C ) )
     => ( ( '3d.parallel/2' @ ( '3d.plane1/3' @ V_A @ V_B @ V_C ) @ V_q )
      <=> ( '3d.parallel/2' @ ( '3d.plane-shape/1' @ ( '3d.plane1/3' @ V_A @ V_B @ V_C ) ) @ V_q ) ) ) )).

thf('3d.def_plane_parallel2_axiom',axiom,(
    ! [V_q: '3d.Shape',V_V: '3d.Vector',V_P: '3d.Point'] :
      ( ( '3d.plane2-type/1' @ ( '3d.plane2/2' @ V_P @ V_V ) )
     => ( ( '3d.parallel/2' @ ( '3d.plane2/2' @ V_P @ V_V ) @ V_q )
      <=> ( '3d.parallel/2' @ ( '3d.plane-shape/1' @ ( '3d.plane2/2' @ V_P @ V_V ) ) @ V_q ) ) ) )).

thf('3d.def_plane_parallel3_axiom',axiom,(
    ! [V_q: '3d.Shape',V_v: $real,V_u: $real,V_t: $real,V_s: $real] :
      ( ( '3d.plane-type/1' @ ( '3d.plane/4' @ V_s @ V_t @ V_u @ V_v ) )
     => ( ( '3d.parallel/2' @ ( '3d.plane/4' @ V_s @ V_t @ V_u @ V_v ) @ V_q )
      <=> ( '3d.parallel/2' @ ( '3d.plane-shape/1' @ ( '3d.plane/4' @ V_s @ V_t @ V_u @ V_v ) ) @ V_q ) ) ) )).

thf('3d.def_plane_parallel4_axiom',axiom,(
    ! [V_p: '3d.Shape',V_q: '3d.Shape'] :
      ( ( '3d.parallel/2' @ ( '3d.plane-shape/1' @ V_p ) @ V_q )
    <=> ( '3d.parallel/2' @ V_q @ ( '3d.plane-shape/1' @ V_p ) ) ) )).

thf('3d.def_triangle_parallel_axiom',axiom,(
    ! [V_p: '3d.Shape',V_R: '3d.Point',V_Q: '3d.Point',V_P: '3d.Point'] :
      ( ( '3d.triangle-type/1' @ ( '3d.triangle/3' @ V_P @ V_Q @ V_R ) )
     => ( ( '3d.parallel/2' @ ( '3d.triangle/3' @ V_P @ V_Q @ V_R ) @ V_p )
      <=> ( '3d.parallel/2' @ ( '3d.plane-shape/1' @ ( '3d.extend-to-plane/1' @ ( '3d.triangle/3' @ V_P @ V_Q @ V_R ) ) ) @ V_p ) ) ) )).

thf('3d.def_square_parallel_axiom',axiom,(
    ! [V_p: '3d.Shape',V_S: '3d.Point',V_R: '3d.Point',V_Q: '3d.Point',V_P: '3d.Point'] :
      ( ( '3d.square-type/1' @ ( '3d.square/4' @ V_P @ V_Q @ V_R @ V_S ) )
     => ( ( '3d.parallel/2' @ ( '3d.square/4' @ V_P @ V_Q @ V_R @ V_S ) @ V_p )
      <=> ( '3d.parallel/2' @ ( '3d.plane-shape/1' @ ( '3d.extend-to-plane/1' @ ( '3d.square/4' @ V_P @ V_Q @ V_R @ V_S ) ) ) @ V_p ) ) ) )).

thf('3d.def_disk_parallel_axiom',axiom,(
    ! [V_p: '3d.Shape',V_n: '3d.Vector',V_r: $real,V_c: '3d.Point'] :
      ( ( '3d.disk-type/1' @ ( '3d.disk/3' @ V_c @ V_r @ V_n ) )
     => ( ( '3d.parallel/2' @ ( '3d.disk/3' @ V_c @ V_r @ V_n ) @ V_p )
      <=> ( '3d.parallel/2' @ ( '3d.plane-shape/1' @ ( '3d.extend-to-plane/1' @ ( '3d.disk/3' @ V_c @ V_r @ V_n ) ) ) @ V_p ) ) ) )).

%-------------------------------------------------------------------------------
%----3D Geometric objects
%-------------------------------------------------------------------------------
thf('3d.tetrahedron-type_axiom',axiom,(
    ! [V_T: '3d.Shape'] :
      ( ( '3d.tetrahedron-type/1' @ V_T )
    <=> ? [V_D: '3d.Point',V_C: '3d.Point',V_B: '3d.Point',V_A: '3d.Point'] :
          ( ( V_T
            = ( '3d.tetrahedron/4' @ V_A @ V_B @ V_C @ V_D ) )
          & ( '3d.is-tetrahedron/4' @ V_A @ V_B @ V_C @ V_D ) ) ) )).

thf('3d.sphere-type_axiom',axiom,(
    ! [V_S: '3d.Shape'] :
      ( ( '3d.sphere-type/1' @ V_S )
    <=> ? [V_r: $real,V_z: $real,V_y: $real,V_x: $real] :
          ( ( V_S
            = ( '3d.sphere/2' @ ( '3d.point/3' @ V_x @ V_y @ V_z ) @ V_r ) )
          & ( $less @ 0.0 @ V_r ) ) ) )).

thf('3d.cuboid-type_axiom',axiom,(
    ! [V_T: '3d.Shape'] :
      ( ( '3d.cuboid-type/1' @ V_T )
    <=> ? [V_H: '3d.Point',V_G: '3d.Point',V_F: '3d.Point',V_E: '3d.Point',V_D: '3d.Point',V_C: '3d.Point',V_B: '3d.Point',V_A: '3d.Point'] :
          ( ( V_T
            = ( '3d.cuboid/8' @ V_A @ V_B @ V_C @ V_D @ V_E @ V_F @ V_G @ V_H ) )
          & ( '3d.is-rectangular-parallelopiped/8' @ V_A @ V_B @ V_C @ V_D @ V_E @ V_F @ V_G @ V_H ) ) ) )).

thf('3d.cube-type_axiom',axiom,(
    ! [V_T: '3d.Shape'] :
      ( ( '3d.cube-type/1' @ V_T )
    <=> ? [V_H: '3d.Point',V_G: '3d.Point',V_F: '3d.Point',V_E: '3d.Point',V_D: '3d.Point',V_C: '3d.Point',V_B: '3d.Point',V_A: '3d.Point'] :
          ( ( V_T
            = ( '3d.cube/8' @ V_A @ V_B @ V_C @ V_D @ V_E @ V_F @ V_G @ V_H ) )
          & ( '3d.is-cube/8' @ V_A @ V_B @ V_C @ V_D @ V_E @ V_F @ V_G @ V_H ) ) ) )).

thf('3d.def_is_square_pyramid_axiom',axiom,(
    ! [V_o: '3d.Point',V_a: '3d.Point',V_b: '3d.Point',V_c: '3d.Point',V_d: '3d.Point'] :
      ( ( '3d.is-square-pyramid/5' @ V_o @ V_a @ V_b @ V_c @ V_d )
    <=> ( ( '3d.is-triangle/3' @ V_o @ V_a @ V_b )
        & ( '3d.is-triangle/3' @ V_o @ V_b @ V_c )
        & ( '3d.is-triangle/3' @ V_o @ V_c @ V_d )
        & ( '3d.is-triangle/3' @ V_o @ V_d @ V_a )
        & ( '3d.is-square/4' @ V_a @ V_b @ V_c @ V_d ) ) ) )).

thf('3d.square-pyramid-type_axiom',axiom,(
    ! [V_T: '3d.Shape'] :
      ( ( '3d.square-pyramid-type/1' @ V_T )
    <=> ? [V_D: '3d.Point',V_C: '3d.Point',V_B: '3d.Point',V_A: '3d.Point',V_O: '3d.Point'] :
          ( ( V_T
            = ( '3d.square-pyramid/5' @ V_O @ V_A @ V_B @ V_C @ V_D ) )
          & ( '3d.is-square-pyramid/5' @ V_O @ V_A @ V_B @ V_C @ V_D ) ) ) )).

thf('3d.octahedron-type_axiom',axiom,(
    ! [V_T: '3d.Shape'] :
      ( ( '3d.octahedron-type/1' @ V_T )
    <=> ? [V_F: '3d.Point',V_E: '3d.Point',V_D: '3d.Point',V_C: '3d.Point',V_B: '3d.Point',V_A: '3d.Point'] :
          ( ( V_T
            = ( '3d.octahedron/6' @ V_A @ V_B @ V_C @ V_D @ V_E @ V_F ) )
          & ( '3d.is-octahedron/6' @ V_A @ V_B @ V_C @ V_D @ V_E @ V_F ) ) ) )).

thf('3d.def_unit_sphere_axiom',axiom,
    ( '3d.unit-sphere/0'
    = ( '3d.sphere/2' @ '3d.origin/0' @ 1.0 ) )).

thf('3d.def_is_sphere_axiom',axiom,(
    ! [V_S: '3d.Shape'] :
      ( ( '3d.is-sphere/1' @ V_S )
    <=> ? [V_p: '3d.Point',V_r: $real] :
          ( ( $less @ 0.0 @ V_r )
          & ( V_S
            = ( '3d.sphere/2' @ V_p @ V_r ) ) ) ) )).

thf('3d.def_is_diameter_of_sphere_axiom',axiom,(
    ! [V_r: $real,V_c: '3d.Point',V_q: '3d.Point',V_p: '3d.Point'] :
      ( ( ( '3d.segment-type/1' @ ( '3d.seg/2' @ V_p @ V_q ) )
        & ( '3d.sphere-type/1' @ ( '3d.sphere/2' @ V_c @ V_r ) ) )
     => ( ( '3d.is-diameter-of/2' @ ( '3d.seg/2' @ V_p @ V_q ) @ ( '3d.sphere/2' @ V_c @ V_r ) )
      <=> ( ( '3d.on/2' @ V_p @ ( '3d.sphere/2' @ V_c @ V_r ) )
          & ( '3d.on/2' @ V_q @ ( '3d.sphere/2' @ V_c @ V_r ) )
          & ( '3d.on/2' @ V_c @ ( '3d.seg/2' @ V_p @ V_q ) ) ) ) ) )).

thf('3d.def_is_diameter_of_disk_axiom',axiom,(
    ! [V_B: '3d.Point',V_A: '3d.Point',V_n: '3d.Vector',V_r: $real,V_c: '3d.Point'] :
      ( ( ( '3d.segment-type/1' @ ( '3d.seg/2' @ V_A @ V_B ) )
        & ( '3d.disk-type/1' @ ( '3d.disk/3' @ V_c @ V_r @ V_n ) ) )
     => ( ( '3d.is-diameter-of/2' @ ( '3d.seg/2' @ V_A @ V_B ) @ ( '3d.disk/3' @ V_c @ V_r @ V_n ) )
      <=> ( ( '3d.on/2' @ V_A @ ( '3d.circle/3' @ V_c @ V_r @ V_n ) )
          & ( '3d.on/2' @ V_B @ ( '3d.circle/3' @ V_c @ V_r @ V_n ) )
          & ( V_c
            = ( '3d.midpoint-of/2' @ V_A @ V_B ) ) ) ) ) )).

thf('3d.def_is_tetrahedron_axiom',axiom,(
    ! [V_A: '3d.Point',V_B: '3d.Point',V_C: '3d.Point',V_D: '3d.Point'] :
      ( ( '3d.is-tetrahedron/4' @ V_A @ V_B @ V_C @ V_D )
    <=> ( ( '3d.is-triangle/3' @ V_A @ V_B @ V_C )
        & ~ ( '3d.on/2' @ V_D @ ( '3d.extend-to-plane/1' @ ( '3d.triangle/3' @ V_A @ V_B @ V_C ) ) ) ) ) )).

thf('3d.def_tetrahedron_equality_axiom',axiom,(
    ! [V_D2: '3d.Point',V_C2: '3d.Point',V_B2: '3d.Point',V_A2: '3d.Point',V_D1: '3d.Point',V_C1: '3d.Point',V_B1: '3d.Point',V_A1: '3d.Point'] :
      ( ( ( '3d.tetrahedron-type/1' @ ( '3d.tetrahedron/4' @ V_A1 @ V_B1 @ V_C1 @ V_D1 ) )
        & ( '3d.tetrahedron-type/1' @ ( '3d.tetrahedron/4' @ V_A2 @ V_B2 @ V_C2 @ V_D2 ) ) )
     => ( ( ( '3d.tetrahedron/4' @ V_A1 @ V_B1 @ V_C1 @ V_D1 )
          = ( '3d.tetrahedron/4' @ V_A2 @ V_B2 @ V_C2 @ V_D2 ) )
      <=> ( ( V_A1 = V_A2 )
          & ( V_B1 = V_B2 )
          & ( V_C1 = V_C2 )
          & ( V_D1 = V_D2 ) ) ) ) )).

thf('3d.def_is_regular_tetrahedron_axiom',axiom,(
    ! [V_A: '3d.Point',V_B: '3d.Point',V_C: '3d.Point',V_D: '3d.Point'] :
      ( ( '3d.is-regular-tetrahedron/4' @ V_A @ V_B @ V_C @ V_D )
    <=> ( ( '3d.is-tetrahedron/4' @ V_A @ V_B @ V_C @ V_D )
        & ( ( '3d.distance^2/2' @ V_A @ V_B )
          = ( '3d.distance^2/2' @ V_A @ V_C ) )
        & ( ( '3d.distance^2/2' @ V_A @ V_B )
          = ( '3d.distance^2/2' @ V_A @ V_D ) )
        & ( ( '3d.distance^2/2' @ V_A @ V_B )
          = ( '3d.distance^2/2' @ V_B @ V_C ) )
        & ( ( '3d.distance^2/2' @ V_A @ V_B )
          = ( '3d.distance^2/2' @ V_C @ V_D ) )
        & ( ( '3d.distance^2/2' @ V_A @ V_B )
          = ( '3d.distance^2/2' @ V_D @ V_B ) ) ) ) )).

thf('3d.def_is_regular_tetrahedron/1_axiom',axiom,(
    ! [V_D: '3d.Point',V_C: '3d.Point',V_B: '3d.Point',V_A: '3d.Point'] :
      ( ( '3d.tetrahedron-type/1' @ ( '3d.tetrahedron/4' @ V_A @ V_B @ V_C @ V_D ) )
     => ( ( '3d.is-regular-tetrahedron/1' @ ( '3d.tetrahedron/4' @ V_A @ V_B @ V_C @ V_D ) )
      <=> ( '3d.is-regular-tetrahedron/4' @ V_A @ V_B @ V_C @ V_D ) ) ) )).

thf('3d.def_triangle_pyramid_is_regular_tetrahedron_axiom',axiom,(
    ! [V_D: '3d.Point',V_C: '3d.Point',V_B: '3d.Point',V_A: '3d.Point'] :
      ( ( ( '3d.pyramid-type/1' @ ( '3d.pyramid/2' @ ( '3d.triangle/3' @ V_A @ V_B @ V_C ) @ V_D ) )
        & ( '3d.triangle-type/1' @ ( '3d.triangle/3' @ V_A @ V_B @ V_C ) ) )
     => ( ( '3d.is-regular-tetrahedron/1' @ ( '3d.pyramid/2' @ ( '3d.triangle/3' @ V_A @ V_B @ V_C ) @ V_D ) )
      <=> ( '3d.is-regular-tetrahedron/4' @ V_A @ V_B @ V_C @ V_D ) ) ) )).

thf('3d.def_triangle_pyramid_is_regular_tetrahedron2_axiom',axiom,(
    ! [V_D: '3d.Point',V_C: '3d.Point',V_B: '3d.Point',V_A: '3d.Point'] :
      ( ( ( '3d.pyramid-type/1' @ ( '3d.pyramid/2' @ ( '3d.polygon/1' @ ( 'cons/2' @ '3d.Point' @ V_A @ ( 'cons/2' @ '3d.Point' @ V_B @ ( 'cons/2' @ '3d.Point' @ V_C @ ( 'nil/0' @ '3d.Point' ) ) ) ) ) @ V_D ) )
        & ( '3d.polygon-type/1' @ ( '3d.polygon/1' @ ( 'cons/2' @ '3d.Point' @ V_A @ ( 'cons/2' @ '3d.Point' @ V_B @ ( 'cons/2' @ '3d.Point' @ V_C @ ( 'nil/0' @ '3d.Point' ) ) ) ) ) ) )
     => ( ( '3d.is-regular-tetrahedron/1' @ ( '3d.pyramid/2' @ ( '3d.polygon/1' @ ( 'cons/2' @ '3d.Point' @ V_A @ ( 'cons/2' @ '3d.Point' @ V_B @ ( 'cons/2' @ '3d.Point' @ V_C @ ( 'nil/0' @ '3d.Point' ) ) ) ) ) @ V_D ) )
      <=> ( '3d.is-regular-tetrahedron/4' @ V_A @ V_B @ V_C @ V_D ) ) ) )).

thf('3d.def_is_parallelopiped_axiom',axiom,(
    ! [V_A: '3d.Point',V_B: '3d.Point',V_C: '3d.Point',V_D: '3d.Point',V_E: '3d.Point',V_F: '3d.Point',V_G: '3d.Point',V_H: '3d.Point'] :
      ( ( '3d.is-parallelopiped/8' @ V_A @ V_B @ V_C @ V_D @ V_E @ V_F @ V_G @ V_H )
    <=> ( ( '3d.is-tetrahedron/4' @ V_A @ V_B @ V_D @ V_E )
        & ( ( '3d.vec/2' @ V_C @ V_B )
          = ( '3d.vec/2' @ V_A @ V_D ) )
        & ( ( '3d.vec/2' @ V_H @ V_D )
          = ( '3d.vec/2' @ V_A @ V_E ) )
        & ( ( '3d.vec/2' @ V_F @ V_E )
          = ( '3d.vec/2' @ V_A @ V_B ) )
        & ( ( '3d.vec/2' @ V_G @ V_C )
          = ( '3d.vec/2' @ V_A @ V_E ) ) ) ) )).

thf('3d.def_is_rectangular_parallelopiped_axiom',axiom,(
    ! [V_A: '3d.Point',V_B: '3d.Point',V_C: '3d.Point',V_D: '3d.Point',V_E: '3d.Point',V_F: '3d.Point',V_G: '3d.Point',V_H: '3d.Point'] :
      ( ( '3d.is-rectangular-parallelopiped/8' @ V_A @ V_B @ V_C @ V_D @ V_E @ V_F @ V_G @ V_H )
    <=> ( ( '3d.is-parallelopiped/8' @ V_A @ V_B @ V_C @ V_D @ V_E @ V_F @ V_G @ V_H )
        & ( '3d.perpendicular/2' @ ( '3d.line/2' @ V_A @ V_B ) @ ( '3d.line/2' @ V_A @ V_D ) )
        & ( '3d.perpendicular/2' @ ( '3d.line/2' @ V_A @ V_D ) @ ( '3d.line/2' @ V_A @ V_E ) )
        & ( '3d.perpendicular/2' @ ( '3d.line/2' @ V_A @ V_E ) @ ( '3d.line/2' @ V_A @ V_B ) ) ) ) )).

thf('3d.def_is_cuboid_axiom',axiom,(
    ! [V_A: '3d.Point',V_B: '3d.Point',V_C: '3d.Point',V_D: '3d.Point',V_E: '3d.Point',V_F: '3d.Point',V_G: '3d.Point',V_H: '3d.Point'] :
      ( ( '3d.is-cuboid/8' @ V_A @ V_B @ V_C @ V_D @ V_E @ V_F @ V_G @ V_H )
    <=> ( '3d.is-rectangular-parallelopiped/8' @ V_A @ V_B @ V_C @ V_D @ V_E @ V_F @ V_G @ V_H ) ) )).

thf('3d.def_is_cube_axiom',axiom,(
    ! [V_A: '3d.Point',V_B: '3d.Point',V_C: '3d.Point',V_D: '3d.Point',V_E: '3d.Point',V_F: '3d.Point',V_G: '3d.Point',V_H: '3d.Point'] :
      ( ( '3d.is-cube/8' @ V_A @ V_B @ V_C @ V_D @ V_E @ V_F @ V_G @ V_H )
    <=> ( ( '3d.is-cuboid/8' @ V_A @ V_B @ V_C @ V_D @ V_E @ V_F @ V_G @ V_H )
        & ( ( '3d.distance^2/2' @ V_A @ V_B )
          = ( '3d.distance^2/2' @ V_A @ V_D ) )
        & ( ( '3d.distance^2/2' @ V_A @ V_B )
          = ( '3d.distance^2/2' @ V_A @ V_E ) ) ) ) )).

thf('3d.def_is_octahedron_axiom',axiom,(
    ! [V_P: '3d.Point',V_A: '3d.Point',V_B: '3d.Point',V_C: '3d.Point',V_D: '3d.Point',V_Q: '3d.Point'] :
      ( ( '3d.is-octahedron/6' @ V_P @ V_A @ V_B @ V_C @ V_D @ V_Q )
    <=> ( ( '3d.is-tetrahedron/4' @ V_P @ V_A @ V_B @ V_D )
        & ( '3d.is-tetrahedron/4' @ V_P @ V_B @ V_C @ V_D )
        & ( '3d.is-tetrahedron/4' @ V_Q @ V_A @ V_B @ V_D )
        & ( '3d.is-tetrahedron/4' @ V_Q @ V_B @ V_C @ V_D )
        & ( '3d.intersect/2' @ ( '3d.seg/2' @ V_A @ V_C ) @ ( '3d.extend-to-plane/1' @ ( '3d.triangle/3' @ V_P @ V_B @ V_D ) ) )
        & ( '3d.intersect/2' @ ( '3d.seg/2' @ V_P @ V_Q ) @ ( '3d.extend-to-plane/1' @ ( '3d.triangle/3' @ V_B @ V_C @ V_D ) ) ) ) ) )).

thf('3d.def_is_regular_octahedron_axiom',axiom,(
    ! [V_P: '3d.Point',V_A: '3d.Point',V_B: '3d.Point',V_C: '3d.Point',V_D: '3d.Point',V_Q: '3d.Point'] :
      ( ( '3d.is-regular-octahedron/6' @ V_P @ V_A @ V_B @ V_C @ V_D @ V_Q )
    <=> ( ( '3d.is-octahedron/6' @ V_P @ V_A @ V_B @ V_C @ V_D @ V_Q )
        & ( '3d.is-equilateral-triangle/3' @ V_P @ V_A @ V_B )
        & ( '3d.is-equilateral-triangle/3' @ V_P @ V_B @ V_C )
        & ( '3d.is-equilateral-triangle/3' @ V_P @ V_C @ V_D )
        & ( '3d.is-equilateral-triangle/3' @ V_P @ V_D @ V_A )
        & ( '3d.is-equilateral-triangle/3' @ V_Q @ V_A @ V_B )
        & ( '3d.is-equilateral-triangle/3' @ V_Q @ V_C @ V_D ) ) ) )).

thf('3d.def_is_regular_octahedron/1_axiom',axiom,(
    ! [V_Q: '3d.Point',V_D: '3d.Point',V_C: '3d.Point',V_B: '3d.Point',V_A: '3d.Point',V_P: '3d.Point'] :
      ( ( '3d.octahedron-type/1' @ ( '3d.octahedron/6' @ V_P @ V_A @ V_B @ V_C @ V_D @ V_Q ) )
     => ( ( '3d.is-regular-octahedron/1' @ ( '3d.octahedron/6' @ V_P @ V_A @ V_B @ V_C @ V_D @ V_Q ) )
      <=> ( '3d.is-regular-octahedron/6' @ V_P @ V_A @ V_B @ V_C @ V_D @ V_Q ) ) ) )).

thf('3d.def_center_of_sphere_axiom',axiom,(
    ! [V_r: $real,V_C: '3d.Point'] :
      ( ( '3d.sphere-type/1' @ ( '3d.sphere/2' @ V_C @ V_r ) )
     => ( ( '3d.center-of/1' @ ( '3d.sphere/2' @ V_C @ V_r ) )
        = V_C ) ) )).

thf('3d.def_radius_of_sphere_axiom',axiom,(
    ! [V_r: $real,V_C: '3d.Point'] :
      ( ( '3d.sphere-type/1' @ ( '3d.sphere/2' @ V_C @ V_r ) )
     => ( ( '3d.radius-of/1' @ ( '3d.sphere/2' @ V_C @ V_r ) )
        = V_r ) ) )).

thf('3d.cone-type_axiom',axiom,(
    ! [V_C: '3d.Shape'] :
      ( ( '3d.cone-type/1' @ V_C )
    <=> ? [V_P: '3d.Point',V_n: '3d.Vector',V_r: $real,V_c: '3d.Point'] :
          ( ( V_C
            = ( '3d.cone/2' @ ( '3d.disk/3' @ V_c @ V_r @ V_n ) @ V_P ) )
          & ( 0.0
           != ( '3d.inner-prod/2' @ ( '3d.vec/2' @ V_c @ V_P ) @ V_n ) ) ) ) )).

thf('3d.right-cone-type_axiom',axiom,(
    ! [V_C: '3d.Shape'] :
      ( ( '3d.right-cone-type/1' @ V_C )
    <=> ? [V_P: '3d.Point',V_n: '3d.Vector',V_r: $real,V_c: '3d.Point'] :
          ( ( V_C
            = ( '3d.right-cone/2' @ ( '3d.disk/3' @ V_c @ V_r @ V_n ) @ V_P ) )
          & ( '3d.vec-parallel/2' @ V_n @ ( '3d.vec/2' @ V_c @ V_P ) ) ) ) )).

thf('3d.cylinder-type_axiom',axiom,(
    ! [V_C: '3d.Shape'] :
      ( ( '3d.cylinder-type/1' @ V_C )
    <=> ? [V_n2: '3d.Vector',V_r2: $real,V_c2: '3d.Point',V_n1: '3d.Vector',V_r1: $real,V_c1: '3d.Point'] :
          ( ( V_C
            = ( '3d.cylinder/2' @ ( '3d.disk/3' @ V_c1 @ V_r1 @ V_n1 ) @ ( '3d.disk/3' @ V_c2 @ V_r2 @ V_n2 ) ) )
          & ( '3d.vec-parallel/2' @ V_n1 @ ( '3d.vec/2' @ V_c1 @ V_c2 ) )
          & ( V_r1 = V_r2 )
          & ( 0.0
           != ( '3d.distance/2' @ V_c1 @ V_c2 ) ) ) ) )).

thf('3d.def_is_pyramid_3d_axiom',axiom,(
    ! [V_p: '3d.Point',V_ps: ( 'ListOf' @ '3d.Point' )] :
      ( ( '3d.polygon-type/1' @ ( '3d.polygon/1' @ V_ps ) )
     => ( ( '3d.is-pyramid/2' @ ( '3d.polygon/1' @ V_ps ) @ V_p )
      <=> ( '3d.is-tetrahedron/4' @ V_p @ ( 'car/1' @ '3d.Point' @ V_ps ) @ ( 'car/1' @ '3d.Point' @ ( 'cdr/1' @ '3d.Point' @ V_ps ) ) @ ( 'car/1' @ '3d.Point' @ ( 'cdr/1' @ '3d.Point' @ ( 'cdr/1' @ '3d.Point' @ V_ps ) ) ) ) ) ) )).

thf('3d.pyramid-type_axiom',axiom,(
    ! [V_P: '3d.Shape'] :
      ( ( '3d.pyramid-type/1' @ V_P )
    <=> ? [V_p: '3d.Point',V_ps: ( 'ListOf' @ '3d.Point' )] :
          ( ( V_P
            = ( '3d.pyramid/2' @ ( '3d.polygon/1' @ V_ps ) @ V_p ) )
          & ( '3d.is-pyramid/2' @ ( '3d.polygon/1' @ V_ps ) @ V_p ) ) ) )).

thf('3d.prism-type_axiom',axiom,(
    ! [V_P: '3d.Shape'] :
      ( ( '3d.prism-type/1' @ V_P )
    <=> ? [V_h: '3d.Vector',V_ps: ( 'ListOf' @ '3d.Point' )] :
          ( ( V_P
            = ( '3d.prism/2' @ ( '3d.polygon/1' @ V_ps ) @ V_h ) )
          & ( '3d.is-polygon/1' @ V_ps )
          & ( V_h != '3d.zero-vector/0' ) ) ) )).

%-------------------------------------------------------------------------------
%----2D-objects in 3D-space
%-------------------------------------------------------------------------------
thf('3d.def_area_of_triangle3d_axiom',axiom,(
    ! [V_r: '3d.Point',V_q: '3d.Point',V_p: '3d.Point'] :
      ( ( '3d.triangle-type/1' @ ( '3d.triangle/3' @ V_p @ V_q @ V_r ) )
     => ( ( '3d.area-of/1' @ ( '3d.triangle/3' @ V_p @ V_q @ V_r ) )
        = ( $product @ ( $quotient @ 1.0 @ 2.0 ) @ ( '3d.radius/1' @ ( '3d.outer-prod/2' @ ( '3d.vec/2' @ V_p @ V_q ) @ ( '3d.vec/2' @ V_p @ V_r ) ) ) ) ) ) )).

thf('3d.circle-type_axiom',axiom,(
    ! [V_C: '3d.Shape'] :
      ( ( '3d.circle-type/1' @ V_C )
    <=> ? [V_nz: $real,V_ny: $real,V_nx: $real,V_r: $real,V_z: $real,V_y: $real,V_x: $real] :
          ( ( V_C
            = ( '3d.circle/3' @ ( '3d.point/3' @ V_x @ V_y @ V_z ) @ V_r @ ( '3d.vec3d/3' @ V_nx @ V_ny @ V_nz ) ) )
          & ( $less @ 0.0 @ V_r )
          & ( ( '3d.vec3d/3' @ V_nx @ V_ny @ V_nz )
           != '3d.zero-vector/0' ) ) ) )).

thf('3d.def_center_of_circle_3d_axiom',axiom,(
    ! [V_n: '3d.Vector',V_r: $real,V_c: '3d.Point'] :
      ( ( '3d.circle-type/1' @ ( '3d.circle/3' @ V_c @ V_r @ V_n ) )
     => ( ( '3d.center-of/1' @ ( '3d.circle/3' @ V_c @ V_r @ V_n ) )
        = V_c ) ) )).

thf('3d.def_radius_of_circle_3d_axiom',axiom,(
    ! [V_n: '3d.Vector',V_r: $real,V_c: '3d.Point'] :
      ( ( '3d.circle-type/1' @ ( '3d.circle/3' @ V_c @ V_r @ V_n ) )
     => ( ( '3d.radius-of/1' @ ( '3d.circle/3' @ V_c @ V_r @ V_n ) )
        = V_r ) ) )).

thf('3d.def_normal_vector_of_circle_3d_axiom',axiom,(
    ! [V_n: '3d.Vector',V_r: $real,V_c: '3d.Point'] :
      ( ( '3d.circle-type/1' @ ( '3d.circle/3' @ V_c @ V_r @ V_n ) )
     => ( ( '3d.normal-vector-of/1' @ ( '3d.circle/3' @ V_c @ V_r @ V_n ) )
        = V_n ) ) )).

thf('3d.def_circle_equality_axiom',axiom,(
    ! [V_n2: '3d.Vector',V_r2: $real,V_c2: '3d.Point',V_n1: '3d.Vector',V_r1: $real,V_c1: '3d.Point'] :
      ( ( ( '3d.circle-type/1' @ ( '3d.circle/3' @ V_c1 @ V_r1 @ V_n1 ) )
        & ( '3d.circle-type/1' @ ( '3d.circle/3' @ V_c2 @ V_r2 @ V_n2 ) ) )
     => ( ( ( '3d.circle/3' @ V_c1 @ V_r1 @ V_n1 )
          = ( '3d.circle/3' @ V_c2 @ V_r2 @ V_n2 ) )
      <=> ( ( V_c1 = V_c2 )
          & ( V_r1 = V_r2 )
          & ( '3d.vec-parallel/2' @ V_n1 @ V_n2 ) ) ) ) )).

thf('3d.disk-type_axiom',axiom,(
    ! [V_D: '3d.Shape'] :
      ( ( '3d.disk-type/1' @ V_D )
    <=> ? [V_nz: $real,V_ny: $real,V_nx: $real,V_r: $real,V_z: $real,V_y: $real,V_x: $real] :
          ( ( V_D
            = ( '3d.disk/3' @ ( '3d.point/3' @ V_x @ V_y @ V_z ) @ V_r @ ( '3d.vec3d/3' @ V_nx @ V_ny @ V_nz ) ) )
          & ( $less @ 0.0 @ V_r )
          & ( ( '3d.vec3d/3' @ V_nx @ V_ny @ V_nz )
           != '3d.zero-vector/0' ) ) ) )).

thf('3d.def_center_of_disk_3d_axiom',axiom,(
    ! [V_n: '3d.Vector',V_r: $real,V_c: '3d.Point'] :
      ( ( '3d.disk-type/1' @ ( '3d.disk/3' @ V_c @ V_r @ V_n ) )
     => ( ( '3d.center-of/1' @ ( '3d.disk/3' @ V_c @ V_r @ V_n ) )
        = V_c ) ) )).

thf('3d.def_radius_of_disk_3d_axiom',axiom,(
    ! [V_n: '3d.Vector',V_r: $real,V_c: '3d.Point'] :
      ( ( '3d.disk-type/1' @ ( '3d.disk/3' @ V_c @ V_r @ V_n ) )
     => ( ( '3d.radius-of/1' @ ( '3d.disk/3' @ V_c @ V_r @ V_n ) )
        = V_r ) ) )).

thf('3d.def_disk_equality_axiom',axiom,(
    ! [V_n2: '3d.Vector',V_r2: $real,V_c2: '3d.Point',V_n1: '3d.Vector',V_r1: $real,V_c1: '3d.Point'] :
      ( ( ( '3d.disk-type/1' @ ( '3d.disk/3' @ V_c1 @ V_r1 @ V_n1 ) )
        & ( '3d.disk-type/1' @ ( '3d.disk/3' @ V_c2 @ V_r2 @ V_n2 ) ) )
     => ( ( ( '3d.disk/3' @ V_c1 @ V_r1 @ V_n1 )
          = ( '3d.disk/3' @ V_c2 @ V_r2 @ V_n2 ) )
      <=> ( ( V_c1 = V_c2 )
          & ( V_r1 = V_r2 )
          & ( '3d.vec-parallel/2' @ V_n1 @ V_n2 ) ) ) ) )).

thf('3d.def_area_of_disk_3d_axiom',axiom,(
    ! [V_n: '3d.Vector',V_r: $real,V_c: '3d.Point'] :
      ( ( '3d.disk-type/1' @ ( '3d.disk/3' @ V_c @ V_r @ V_n ) )
     => ( ( '3d.area-of/1' @ ( '3d.disk/3' @ V_c @ V_r @ V_n ) )
        = ( $product @ 'Pi/0' @ ( '^/2' @ V_r @ 2.0 ) ) ) ) )).

thf('3d.def_normal_vec_of_disk_3d_axiom',axiom,(
    ! [V_n: '3d.Vector',V_r: $real,V_c: '3d.Point'] :
      ( ( '3d.disk-type/1' @ ( '3d.disk/3' @ V_c @ V_r @ V_n ) )
     => ( ( '3d.normal-vector-of/1' @ ( '3d.disk/3' @ V_c @ V_r @ V_n ) )
        = V_n ) ) )).

thf('3d.def_line_inside_of_plane_axiom',axiom,(
    ! [V_P: '3d.Shape',V_q: '3d.Point',V_p: '3d.Point'] :
      ( ( '3d.line-type/1' @ ( '3d.line/2' @ V_p @ V_q ) )
     => ( ( '3d.inside-of/2' @ ( '3d.line/2' @ V_p @ V_q ) @ ( '3d.plane-shape/1' @ V_P ) )
      <=> ( ( '3d.on/2' @ V_p @ V_P )
          & ( '3d.on/2' @ V_q @ V_P ) ) ) ) )).

thf('3d.arc-type_axiom',axiom,(
    ! [V_A: '3d.Shape'] :
      ( ( '3d.arc-type/1' @ V_A )
    <=> ? [V_n: '3d.Vector',V_a: $real,V_p: '3d.Point',V_c: '3d.Point'] :
          ( ( V_A
            = ( '3d.arc/4' @ V_c @ V_p @ V_a @ V_n ) )
          & ( ( '3d.vec/2' @ V_c @ V_p )
           != '3d.zero-vector/0' )
          & ( V_n != '3d.zero-vector/0' )
          & ( $lesseq @ 0.0 @ V_a )
          & ( $less @ V_a @ ( $product @ 2.0 @ 'Pi/0' ) )
          & ( 0.0
            = ( '3d.inner-prod/2' @ ( '3d.vec/2' @ V_c @ V_p ) @ V_n ) ) ) ) )).

thf('3d.def_center_of_arc_3d_axiom',axiom,(
    ! [V_n: '3d.Vector',V_a: $real,V_p: '3d.Point',V_c: '3d.Point'] :
      ( ( '3d.arc-type/1' @ ( '3d.arc/4' @ V_c @ V_p @ V_a @ V_n ) )
     => ( ( '3d.center-of/1' @ ( '3d.arc/4' @ V_c @ V_p @ V_a @ V_n ) )
        = V_c ) ) )).

thf('3d.def_arc_ini_point_3d_axiom',axiom,(
    ! [V_n: '3d.Vector',V_a: $real,V_p: '3d.Point',V_c: '3d.Point'] :
      ( ( '3d.arc-type/1' @ ( '3d.arc/4' @ V_c @ V_p @ V_a @ V_n ) )
     => ( ( '3d.arc-ini-point/1' @ ( '3d.arc/4' @ V_c @ V_p @ V_a @ V_n ) )
        = V_p ) ) )).

thf('3d.def_arc_end_point_3d_axiom',axiom,(
    ! [V_n1: '3d.Vector',V_a: $real,V_p: '3d.Point',V_c: '3d.Point'] :
      ( ( '3d.arc-type/1' @ ( '3d.arc/4' @ V_c @ V_p @ V_a @ V_n1 ) )
     => ( ( '3d.arc-end-point/1' @ ( '3d.arc/4' @ V_c @ V_p @ V_a @ V_n1 ) )
        = ( '3d.point/3' @ ( $sum @ ( '3d.x-coord/1' @ V_c ) @ ( '3d.x-coord/1' @ ( '3d.vec->point/1' @ ( '3d.mv*/2' @ ( '3d.matrix-by-columns/3' @ ( '3d.normalize/1' @ ( '3d.vec/2' @ V_c @ V_p ) ) @ ( '3d.outer-prod/2' @ ( '3d.normalize/1' @ V_n1 ) @ ( '3d.normalize/1' @ ( '3d.vec/2' @ V_c @ V_p ) ) ) @ ( '3d.normalize/1' @ V_n1 ) ) @ ( '3d.mv*/2' @ ( '3d.matrix/9' @ ( 'cos/1' @ V_a ) @ ( $uminus @ ( 'sin/1' @ V_a ) ) @ 0.0 @ ( 'sin/1' @ V_a ) @ ( 'cos/1' @ V_a ) @ 0.0 @ 0.0 @ 0.0 @ 1.0 ) @ ( '3d.mv*/2' @ ( '3d.transposed-matrix/1' @ ( '3d.matrix-by-columns/3' @ ( '3d.normalize/1' @ ( '3d.vec/2' @ V_c @ V_p ) ) @ ( '3d.outer-prod/2' @ ( '3d.normalize/1' @ V_n1 ) @ ( '3d.normalize/1' @ ( '3d.vec/2' @ V_c @ V_p ) ) ) @ ( '3d.normalize/1' @ V_n1 ) ) ) @ ( '3d.vec/2' @ V_c @ V_p ) ) ) ) ) ) ) @ ( $sum @ ( '3d.y-coord/1' @ V_c ) @ ( '3d.y-coord/1' @ ( '3d.vec->point/1' @ ( '3d.mv*/2' @ ( '3d.matrix-by-columns/3' @ ( '3d.normalize/1' @ ( '3d.vec/2' @ V_c @ V_p ) ) @ ( '3d.outer-prod/2' @ ( '3d.normalize/1' @ V_n1 ) @ ( '3d.normalize/1' @ ( '3d.vec/2' @ V_c @ V_p ) ) ) @ ( '3d.normalize/1' @ V_n1 ) ) @ ( '3d.mv*/2' @ ( '3d.matrix/9' @ ( 'cos/1' @ V_a ) @ ( $uminus @ ( 'sin/1' @ V_a ) ) @ 0.0 @ ( 'sin/1' @ V_a ) @ ( 'cos/1' @ V_a ) @ 0.0 @ 0.0 @ 0.0 @ 1.0 ) @ ( '3d.mv*/2' @ ( '3d.transposed-matrix/1' @ ( '3d.matrix-by-columns/3' @ ( '3d.normalize/1' @ ( '3d.vec/2' @ V_c @ V_p ) ) @ ( '3d.outer-prod/2' @ ( '3d.normalize/1' @ V_n1 ) @ ( '3d.normalize/1' @ ( '3d.vec/2' @ V_c @ V_p ) ) ) @ ( '3d.normalize/1' @ V_n1 ) ) ) @ ( '3d.vec/2' @ V_c @ V_p ) ) ) ) ) ) ) @ ( $sum @ ( '3d.z-coord/1' @ V_c ) @ ( '3d.z-coord/1' @ ( '3d.vec->point/1' @ ( '3d.mv*/2' @ ( '3d.matrix-by-columns/3' @ ( '3d.normalize/1' @ ( '3d.vec/2' @ V_c @ V_p ) ) @ ( '3d.outer-prod/2' @ ( '3d.normalize/1' @ V_n1 ) @ ( '3d.normalize/1' @ ( '3d.vec/2' @ V_c @ V_p ) ) ) @ ( '3d.normalize/1' @ V_n1 ) ) @ ( '3d.mv*/2' @ ( '3d.matrix/9' @ ( 'cos/1' @ V_a ) @ ( $uminus @ ( 'sin/1' @ V_a ) ) @ 0.0 @ ( 'sin/1' @ V_a ) @ ( 'cos/1' @ V_a ) @ 0.0 @ 0.0 @ 0.0 @ 1.0 ) @ ( '3d.mv*/2' @ ( '3d.transposed-matrix/1' @ ( '3d.matrix-by-columns/3' @ ( '3d.normalize/1' @ ( '3d.vec/2' @ V_c @ V_p ) ) @ ( '3d.outer-prod/2' @ ( '3d.normalize/1' @ V_n1 ) @ ( '3d.normalize/1' @ ( '3d.vec/2' @ V_c @ V_p ) ) ) @ ( '3d.normalize/1' @ V_n1 ) ) ) @ ( '3d.vec/2' @ V_c @ V_p ) ) ) ) ) ) ) ) ) ) )).

thf('3d.def_arc_central_angle_3d_axiom',axiom,(
    ! [V_n: '3d.Vector',V_a: $real,V_p: '3d.Point',V_c: '3d.Point'] :
      ( ( '3d.arc-type/1' @ ( '3d.arc/4' @ V_c @ V_p @ V_a @ V_n ) )
     => ( ( '3d.arc-central-angle/1' @ ( '3d.arc/4' @ V_c @ V_p @ V_a @ V_n ) )
        = V_a ) ) )).

thf('3d.def_arc_normal_vector_of_axiom',axiom,(
    ! [V_n: '3d.Vector',V_a: $real,V_p: '3d.Point',V_c: '3d.Point'] :
      ( ( '3d.arc-type/1' @ ( '3d.arc/4' @ V_c @ V_p @ V_a @ V_n ) )
     => ( ( '3d.normal-vector-of/1' @ ( '3d.arc/4' @ V_c @ V_p @ V_a @ V_n ) )
        = V_n ) ) )).

thf('3d.def_arc_by_three_points_normal_vector_of_axiom',axiom,(
    ! [V_c: '3d.Point',V_p: '3d.Point',V_q: '3d.Point'] :
      ( ( '3d.normal-vector-of/1' @ ( '3d.arc/3' @ V_c @ V_p @ V_q ) )
      = ( '3d.outer-prod/2' @ ( '3d.vec/2' @ V_c @ V_p ) @ ( '3d.vec/2' @ V_c @ V_q ) ) ) )).

thf('3d.def_major_arc_by_three_points_normal_vector_of_axiom',axiom,(
    ! [V_c: '3d.Point',V_p: '3d.Point',V_q: '3d.Point'] :
      ( ( '3d.normal-vector-of/1' @ ( '3d.major-arc/1' @ ( '3d.arc/3' @ V_c @ V_p @ V_q ) ) )
      = ( '3d.normal-vector-of/1' @ ( '3d.arc/3' @ V_c @ V_p @ V_q ) ) ) )).

thf('3d.def_minor_arc_by_three_points_normal_vector_of_axiom',axiom,(
    ! [V_c: '3d.Point',V_p: '3d.Point',V_q: '3d.Point'] :
      ( ( '3d.normal-vector-of/1' @ ( '3d.minor-arc/1' @ ( '3d.arc/3' @ V_c @ V_p @ V_q ) ) )
      = ( '3d.normal-vector-of/1' @ ( '3d.arc/3' @ V_c @ V_p @ V_q ) ) ) )).

thf('3d.def_radius_of_arc_3d_axiom',axiom,(
    ! [V_n: '3d.Vector',V_a: $real,V_p: '3d.Point',V_c: '3d.Point'] :
      ( ( '3d.arc-type/1' @ ( '3d.arc/4' @ V_c @ V_p @ V_a @ V_n ) )
     => ( ( '3d.radius-of/1' @ ( '3d.arc/4' @ V_c @ V_p @ V_a @ V_n ) )
        = ( '3d.radius-of/1' @ ( '3d.arc-shape/1' @ ( '3d.arc/4' @ V_c @ V_p @ V_a @ V_n ) ) ) ) ) )).

thf('3d.def_length_of_arc_3d_axiom',axiom,(
    ! [V_n: '3d.Vector',V_a: $real,V_p: '3d.Point',V_c: '3d.Point'] :
      ( ( '3d.arc-type/1' @ ( '3d.arc/4' @ V_c @ V_p @ V_a @ V_n ) )
     => ( ( '3d.length-of/1' @ ( '3d.arc/4' @ V_c @ V_p @ V_a @ V_n ) )
        = ( '3d.length-of/1' @ ( '3d.arc-shape/1' @ ( '3d.arc/4' @ V_c @ V_p @ V_a @ V_n ) ) ) ) ) )).

thf('3d.def_area_of_arc_3d_axiom',axiom,(
    ! [V_n: '3d.Vector',V_a: $real,V_p: '3d.Point',V_c: '3d.Point'] :
      ( ( '3d.arc-type/1' @ ( '3d.arc/4' @ V_c @ V_p @ V_a @ V_n ) )
     => ( ( '3d.area-of/1' @ ( '3d.arc/4' @ V_c @ V_p @ V_a @ V_n ) )
        = ( '3d.area-of/1' @ ( '3d.arc-shape/1' @ ( '3d.arc/4' @ V_c @ V_p @ V_a @ V_n ) ) ) ) ) )).

thf('3d.def_arc_equality_3d_axiom',axiom,(
    ! [V_n2: '3d.Vector',V_a2: $real,V_p2: '3d.Point',V_c2: '3d.Point',V_n1: '3d.Vector',V_a1: $real,V_p1: '3d.Point',V_c1: '3d.Point'] :
      ( ( ( '3d.arc-type/1' @ ( '3d.arc/4' @ V_c1 @ V_p1 @ V_a1 @ V_n1 ) )
        & ( '3d.arc-type/1' @ ( '3d.arc/4' @ V_c2 @ V_p2 @ V_a2 @ V_n2 ) ) )
     => ( ( ( '3d.arc/4' @ V_c1 @ V_p1 @ V_a1 @ V_n1 )
          = ( '3d.arc/4' @ V_c2 @ V_p2 @ V_a2 @ V_n2 ) )
      <=> ( ( V_c1 = V_c2 )
          & ( V_p1 = V_p2 )
          & ( V_a1 = V_a2 )
          & ( '3d.vec-parallel/2' @ V_n1 @ V_n2 ) ) ) ) )).

thf('3d.def_local_system_of_arc_3d_axiom',axiom,(
    ! [V_n: '3d.Vector',V_a: $real,V_p: '3d.Point',V_c: '3d.Point'] :
      ( ( '3d.arc-type/1' @ ( '3d.arc/4' @ V_c @ V_p @ V_a @ V_n ) )
     => ( ( '3d.local-system-of/1' @ ( '3d.arc/4' @ V_c @ V_p @ V_a @ V_n ) )
        = ( 'cons/2' @ '3d.Vector' @ ( '3d.normalize/1' @ ( '3d.vec/2' @ V_c @ ( '3d.arc-ini-point/1' @ ( '3d.arc/4' @ V_c @ V_p @ V_a @ V_n ) ) ) ) @ ( 'cons/2' @ '3d.Vector' @ ( '3d.outer-prod/2' @ ( '3d.normalize/1' @ V_n ) @ ( '3d.normalize/1' @ ( '3d.vec/2' @ V_c @ ( '3d.arc-ini-point/1' @ ( '3d.arc/4' @ V_c @ V_p @ V_a @ V_n ) ) ) ) ) @ ( 'cons/2' @ '3d.Vector' @ ( '3d.normalize/1' @ V_n ) @ ( 'nil/0' @ '3d.Vector' ) ) ) ) ) ) )).

thf('3d.def_local_system_of_minor_arc_by_three_points_3d_axiom',axiom,(
    ! [V_c: '3d.Point',V_p: '3d.Point',V_q: '3d.Point'] :
      ( ( '3d.local-system-of/1' @ ( '3d.minor-arc/1' @ ( '3d.arc/3' @ V_c @ V_p @ V_q ) ) )
      = ( 'cons/2' @ '3d.Vector' @ ( '3d.normalize/1' @ ( '3d.vec/2' @ V_c @ V_p ) ) @ ( 'cons/2' @ '3d.Vector' @ ( '3d.normalize/1' @ ( '3d.v+/2' @ ( '3d.vec/2' @ V_c @ V_q ) @ ( '3d.sv*/2' @ ( $uminus @ ( '3d.inner-prod/2' @ ( '3d.vec/2' @ V_c @ V_q ) @ ( '3d.normalize/1' @ ( '3d.vec/2' @ V_c @ V_p ) ) ) ) @ ( '3d.normalize/1' @ ( '3d.vec/2' @ V_c @ V_p ) ) ) ) ) @ ( 'cons/2' @ '3d.Vector' @ ( '3d.outer-prod/2' @ ( '3d.normalize/1' @ ( '3d.vec/2' @ V_c @ V_p ) ) @ ( '3d.normalize/1' @ ( '3d.v+/2' @ ( '3d.vec/2' @ V_c @ V_q ) @ ( '3d.sv*/2' @ ( $uminus @ ( '3d.inner-prod/2' @ ( '3d.vec/2' @ V_c @ V_q ) @ ( '3d.normalize/1' @ ( '3d.vec/2' @ V_c @ V_p ) ) ) ) @ ( '3d.normalize/1' @ ( '3d.vec/2' @ V_c @ V_p ) ) ) ) ) ) @ ( 'nil/0' @ '3d.Vector' ) ) ) ) ) )).

thf('3d.def_local_system_of_major_arc_by_three_points_3d_axiom',axiom,(
    ! [V_c: '3d.Point',V_p: '3d.Point',V_q: '3d.Point'] :
      ( ( '3d.local-system-of/1' @ ( '3d.major-arc/1' @ ( '3d.arc/3' @ V_c @ V_p @ V_q ) ) )
      = ( 'cons/2' @ '3d.Vector' @ ( '3d.normalize/1' @ ( '3d.vec/2' @ V_c @ V_p ) ) @ ( 'cons/2' @ '3d.Vector' @ ( '3d.normalize/1' @ ( '3d.sv*/2' @ -1.0 @ ( '3d.v+/2' @ ( '3d.vec/2' @ V_c @ V_q ) @ ( '3d.sv*/2' @ ( $uminus @ ( '3d.inner-prod/2' @ ( '3d.vec/2' @ V_c @ V_q ) @ ( '3d.normalize/1' @ ( '3d.vec/2' @ V_c @ V_p ) ) ) ) @ ( '3d.normalize/1' @ ( '3d.vec/2' @ V_c @ V_p ) ) ) ) ) ) @ ( 'cons/2' @ '3d.Vector' @ ( '3d.outer-prod/2' @ ( '3d.normalize/1' @ ( '3d.vec/2' @ V_c @ V_p ) ) @ ( '3d.normalize/1' @ ( '3d.sv*/2' @ -1.0 @ ( '3d.v+/2' @ ( '3d.vec/2' @ V_c @ V_q ) @ ( '3d.sv*/2' @ ( $uminus @ ( '3d.inner-prod/2' @ ( '3d.vec/2' @ V_c @ V_q ) @ ( '3d.normalize/1' @ ( '3d.vec/2' @ V_c @ V_p ) ) ) ) @ ( '3d.normalize/1' @ ( '3d.vec/2' @ V_c @ V_p ) ) ) ) ) ) ) @ ( 'nil/0' @ '3d.Vector' ) ) ) ) ) )).

thf('3d.def_local_system_of_arc_by_three_points_3d_axiom',axiom,(
    ! [V_c: '3d.Point',V_p: '3d.Point',V_q: '3d.Point'] :
      ( ( '3d.local-system-of/1' @ ( '3d.arc/3' @ V_c @ V_p @ V_q ) )
      = ( '3d.local-system-of/1' @ ( '3d.minor-arc/1' @ ( '3d.arc/3' @ V_c @ V_p @ V_q ) ) ) ) )).

thf('3d.circular-sector-type_axiom',axiom,(
    ! [V_A: '3d.Shape'] :
      ( ( '3d.circular-sector-type/1' @ V_A )
    <=> ? [V_n: '3d.Vector',V_a: $real,V_p: '3d.Point',V_c: '3d.Point'] :
          ( ( V_A
            = ( '3d.circular-sector/4' @ V_c @ V_p @ V_a @ V_n ) )
          & ( ( '3d.vec/2' @ V_c @ V_p )
           != '3d.zero-vector/0' )
          & ( V_n != '3d.zero-vector/0' )
          & ( $lesseq @ 0.0 @ V_a )
          & ( $less @ V_a @ ( $product @ 2.0 @ 'Pi/0' ) )
          & ( 0.0
            = ( '3d.inner-prod/2' @ ( '3d.vec/2' @ V_c @ V_p ) @ V_n ) ) ) ) )).

thf('3d.def_center_of_circular_sector_3d_axiom',axiom,(
    ! [V_n: '3d.Vector',V_a: $real,V_p: '3d.Point',V_c: '3d.Point'] :
      ( ( '3d.circular-sector-type/1' @ ( '3d.circular-sector/4' @ V_c @ V_p @ V_a @ V_n ) )
     => ( ( '3d.center-of/1' @ ( '3d.circular-sector/4' @ V_c @ V_p @ V_a @ V_n ) )
        = V_c ) ) )).

thf('3d.def_circular_sector_ini_point_3d_axiom',axiom,(
    ! [V_n: '3d.Vector',V_a: $real,V_p: '3d.Point',V_c: '3d.Point'] :
      ( ( '3d.circular-sector-type/1' @ ( '3d.circular-sector/4' @ V_c @ V_p @ V_a @ V_n ) )
     => ( ( '3d.circular-sector-ini-point/1' @ ( '3d.circular-sector/4' @ V_c @ V_p @ V_a @ V_n ) )
        = V_p ) ) )).

thf('3d.def_circular_sector_end_point_3d_axiom',axiom,(
    ! [V_n1: '3d.Vector',V_a: $real,V_p: '3d.Point',V_c: '3d.Point'] :
      ( ( '3d.circular-sector-type/1' @ ( '3d.circular-sector/4' @ V_c @ V_p @ V_a @ V_n1 ) )
     => ( ( '3d.circular-sector-end-point/1' @ ( '3d.circular-sector/4' @ V_c @ V_p @ V_a @ V_n1 ) )
        = ( '3d.arc-end-point/1' @ ( '3d.arc/4' @ V_c @ V_p @ V_a @ V_n1 ) ) ) ) )).

thf('3d.def_circular_sector_central_angle_3d_axiom',axiom,(
    ! [V_n: '3d.Vector',V_a: $real,V_p: '3d.Point',V_c: '3d.Point'] :
      ( ( '3d.circular-sector-type/1' @ ( '3d.circular-sector/4' @ V_c @ V_p @ V_a @ V_n ) )
     => ( ( '3d.circular-sector-central-angle/1' @ ( '3d.circular-sector/4' @ V_c @ V_p @ V_a @ V_n ) )
        = V_a ) ) )).

thf('3d.def_circular_sector_normal_vector_of_axiom',axiom,(
    ! [V_n: '3d.Vector',V_a: $real,V_p: '3d.Point',V_c: '3d.Point'] :
      ( ( '3d.circular-sector-type/1' @ ( '3d.circular-sector/4' @ V_c @ V_p @ V_a @ V_n ) )
     => ( ( '3d.normal-vector-of/1' @ ( '3d.circular-sector/4' @ V_c @ V_p @ V_a @ V_n ) )
        = V_n ) ) )).

thf('3d.def_radius_of_circular_sector_3d_axiom',axiom,(
    ! [V_n: '3d.Vector',V_a: $real,V_p: '3d.Point',V_c: '3d.Point'] :
      ( ( '3d.circular-sector-type/1' @ ( '3d.circular-sector/4' @ V_c @ V_p @ V_a @ V_n ) )
     => ( ( '3d.radius-of/1' @ ( '3d.circular-sector/4' @ V_c @ V_p @ V_a @ V_n ) )
        = ( '3d.distance/2' @ V_c @ V_p ) ) ) )).

thf('3d.def_area_of_circular_sector_3d_axiom',axiom,(
    ! [V_n: '3d.Vector',V_a: $real,V_p: '3d.Point',V_c: '3d.Point'] :
      ( ( '3d.circular-sector-type/1' @ ( '3d.circular-sector/4' @ V_c @ V_p @ V_a @ V_n ) )
     => ( ( '3d.area-of/1' @ ( '3d.circular-sector/4' @ V_c @ V_p @ V_a @ V_n ) )
        = ( '3d.area-of/1' @ ( '3d.arc/4' @ V_c @ V_p @ V_a @ V_n ) ) ) ) )).

thf('3d.def_circular_sector_equality_3d_axiom',axiom,(
    ! [V_n2: '3d.Vector',V_a2: $real,V_p2: '3d.Point',V_c2: '3d.Point',V_n1: '3d.Vector',V_a1: $real,V_p1: '3d.Point',V_c1: '3d.Point'] :
      ( ( ( '3d.circular-sector-type/1' @ ( '3d.circular-sector/4' @ V_c1 @ V_p1 @ V_a1 @ V_n1 ) )
        & ( '3d.circular-sector-type/1' @ ( '3d.circular-sector/4' @ V_c2 @ V_p2 @ V_a2 @ V_n2 ) ) )
     => ( ( ( '3d.circular-sector/4' @ V_c1 @ V_p1 @ V_a1 @ V_n1 )
          = ( '3d.circular-sector/4' @ V_c2 @ V_p2 @ V_a2 @ V_n2 ) )
      <=> ( ( V_c1 = V_c2 )
          & ( V_p1 = V_p2 )
          & ( V_a1 = V_a2 )
          & ( '3d.vec-parallel/2' @ V_n1 @ V_n2 ) ) ) ) )).

thf('3d.def_arc_of_circular_sector_3d_axiom',axiom,(
    ! [V_n: '3d.Vector',V_a: $real,V_p: '3d.Point',V_c: '3d.Point'] :
      ( ( '3d.circular-sector-type/1' @ ( '3d.circular-sector/4' @ V_c @ V_p @ V_a @ V_n ) )
     => ( ( '3d.arc-of/1' @ ( '3d.circular-sector/4' @ V_c @ V_p @ V_a @ V_n ) )
        = ( '3d.arc/4' @ V_c @ V_p @ V_a @ V_n ) ) ) )).

thf('3d.def_sides_of_circular_sector_3d_axiom',axiom,(
    ! [V_n: '3d.Vector',V_a: $real,V_p: '3d.Point',V_c: '3d.Point'] :
      ( ( '3d.circular-sector-type/1' @ ( '3d.circular-sector/4' @ V_c @ V_p @ V_a @ V_n ) )
     => ( ( '3d.sides-of/1' @ ( '3d.circular-sector/4' @ V_c @ V_p @ V_a @ V_n ) )
        = ( '3d.sides-of/1' @ ( '3d.circular-sector-shape/1' @ ( '3d.circular-sector/4' @ V_c @ V_p @ V_a @ V_n ) ) ) ) ) )).

thf('3d.def_local_system_of_circular_sector_3d_axiom',axiom,(
    ! [V_n: '3d.Vector',V_a: $real,V_p: '3d.Point',V_c: '3d.Point'] :
      ( ( '3d.circular-sector-type/1' @ ( '3d.circular-sector/4' @ V_c @ V_p @ V_a @ V_n ) )
     => ( ( '3d.local-system-of/1' @ ( '3d.circular-sector/4' @ V_c @ V_p @ V_a @ V_n ) )
        = ( '3d.local-system-of/1' @ ( '3d.arc/4' @ V_c @ V_p @ V_a @ V_n ) ) ) ) )).

thf('3d.def_coplanar_3d_axiom',axiom,(
    ! [V_p0: '3d.Point',V_p1: '3d.Point',V_p2: '3d.Point',V_p3: '3d.Point'] :
      ( ( '3d.coplanar/4' @ V_p0 @ V_p1 @ V_p2 @ V_p3 )
    <=> ( '3d.vec-perpendicular/2' @ ( '3d.outer-prod/2' @ ( '3d.vec/2' @ V_p0 @ V_p1 ) @ ( '3d.vec/2' @ V_p0 @ V_p2 ) ) @ ( '3d.vec/2' @ V_p0 @ V_p3 ) ) ) )).

thf('3d.def_points_coplanar_3d_base_case0_axiom',axiom,
    ( ( '3d.points-coplanar/1' @ ( 'nil/0' @ '3d.Point' ) )
  <=> $true )).

thf('3d.def_points_coplanar_3d_base_case1_axiom',axiom,(
    ! [V_p0: '3d.Point'] :
      ( ( '3d.points-coplanar/1' @ ( 'cons/2' @ '3d.Point' @ V_p0 @ ( 'nil/0' @ '3d.Point' ) ) )
    <=> $true ) )).

thf('3d.def_points_coplanar_3d_base_case2_axiom',axiom,(
    ! [V_p0: '3d.Point',V_p1: '3d.Point'] :
      ( ( '3d.points-coplanar/1' @ ( 'cons/2' @ '3d.Point' @ V_p0 @ ( 'cons/2' @ '3d.Point' @ V_p1 @ ( 'nil/0' @ '3d.Point' ) ) ) )
    <=> $true ) )).

thf('3d.def_points_coplanar_3d_base_case3_axiom',axiom,(
    ! [V_p0: '3d.Point',V_p1: '3d.Point',V_p2: '3d.Point'] :
      ( ( '3d.points-coplanar/1' @ ( 'cons/2' @ '3d.Point' @ V_p0 @ ( 'cons/2' @ '3d.Point' @ V_p1 @ ( 'cons/2' @ '3d.Point' @ V_p2 @ ( 'nil/0' @ '3d.Point' ) ) ) ) )
    <=> $true ) )).

thf('3d.def_points_coplanar_3d_axiom',axiom,(
    ! [V_p0: '3d.Point',V_p1: '3d.Point',V_p2: '3d.Point',V_p3: '3d.Point',V_ps: ( 'ListOf' @ '3d.Point' )] :
      ( ( '3d.points-coplanar/1' @ ( 'cons/2' @ '3d.Point' @ V_p0 @ ( 'cons/2' @ '3d.Point' @ V_p1 @ ( 'cons/2' @ '3d.Point' @ V_p2 @ ( 'cons/2' @ '3d.Point' @ V_p3 @ V_ps ) ) ) ) )
    <=> ( ( '3d.coplanar/4' @ V_p0 @ V_p1 @ V_p2 @ V_p3 )
        & ( '3d.points-coplanar/1' @ ( 'cons/2' @ '3d.Point' @ V_p0 @ ( 'cons/2' @ '3d.Point' @ V_p1 @ ( 'cons/2' @ '3d.Point' @ V_p2 @ V_ps ) ) ) ) ) ) )).

thf('3d.def_points_bending_to_same_side_3d_axiom',axiom,(
    ! [V_p0: '3d.Point',V_p1: '3d.Point',V_ps: ( 'ListOf' @ '3d.Point' )] :
      ( ( '3d.points-bending-to-same-side/1' @ ( 'cons/2' @ '3d.Point' @ V_p0 @ ( 'cons/2' @ '3d.Point' @ V_p1 @ V_ps ) ) )
    <=> ( ( '3d.points-coplanar/1' @ ( 'cons/2' @ '3d.Point' @ V_p0 @ ( 'cons/2' @ '3d.Point' @ V_p1 @ V_ps ) ) )
        & ( 'cyclic-all/2' @ '3d.Point'
          @ ^ [V_x: '3d.Point',V_y: '3d.Point',V_z: '3d.Point'] :
              ( $less @ 0.0 @ ( '3d.inner-prod/2' @ ( '3d.outer-prod/2' @ ( '3d.vec/2' @ V_p0 @ ( 'last/1' @ '3d.Point' @ V_ps ) ) @ ( '3d.vec/2' @ V_p0 @ V_p1 ) ) @ ( '3d.outer-prod/2' @ ( '3d.vec/2' @ V_y @ V_x ) @ ( '3d.vec/2' @ V_y @ V_z ) ) ) )
          @ ( 'cons/2' @ '3d.Point' @ V_p0 @ ( 'cons/2' @ '3d.Point' @ V_p1 @ V_ps ) ) ) ) ) )).

thf('3d.polygon-type_axiom',axiom,(
    ! [V_P: '3d.Shape'] :
      ( ( '3d.polygon-type/1' @ V_P )
    <=> ? [V_ps: ( 'ListOf' @ '3d.Point' )] :
          ( ( V_P
            = ( '3d.polygon/1' @ V_ps ) )
          & ( '3d.is-polygon/1' @ V_ps ) ) ) )).

thf('3d.def_plane_figure_inside_of_plane_axiom',axiom,(
    ! [V_S: '3d.Shape',V_P: '3d.Shape'] :
      ( ( '3d.inside-of/2' @ ( '3d.plane-figure/1' @ V_S ) @ ( '3d.plane-shape/1' @ V_P ) )
    <=> ( ( '3d.extend-to-plane/1' @ V_S )
        = V_P ) ) )).

thf('3d.def_shape_inside_of_plane_axiom',axiom,(
    ! [V_v: $real,V_u: $real,V_t: $real,V_s: $real,V_S: '3d.Shape'] :
      ( ( '3d.plane-type/1' @ ( '3d.plane/4' @ V_s @ V_t @ V_u @ V_v ) )
     => ( ( '3d.inside-of/2' @ V_S @ ( '3d.plane/4' @ V_s @ V_t @ V_u @ V_v ) )
      <=> ( '3d.inside-of/2' @ V_S @ ( '3d.plane-shape/1' @ ( '3d.plane/4' @ V_s @ V_t @ V_u @ V_v ) ) ) ) ) )).

thf('3d.def_shape_inside_of_plane1_axiom',axiom,(
    ! [V_R: '3d.Point',V_Q: '3d.Point',V_P: '3d.Point',V_S: '3d.Shape'] :
      ( ( '3d.plane1-type/1' @ ( '3d.plane1/3' @ V_P @ V_Q @ V_R ) )
     => ( ( '3d.inside-of/2' @ V_S @ ( '3d.plane1/3' @ V_P @ V_Q @ V_R ) )
      <=> ( '3d.inside-of/2' @ V_S @ ( '3d.plane-shape/1' @ ( '3d.plane1/3' @ V_P @ V_Q @ V_R ) ) ) ) ) )).

thf('3d.def_shape_inside_of_plane2_axiom',axiom,(
    ! [V_V: '3d.Vector',V_P: '3d.Point',V_S: '3d.Shape'] :
      ( ( '3d.plane2-type/1' @ ( '3d.plane2/2' @ V_P @ V_V ) )
     => ( ( '3d.inside-of/2' @ V_S @ ( '3d.plane2/2' @ V_P @ V_V ) )
      <=> ( '3d.inside-of/2' @ V_S @ ( '3d.plane-shape/1' @ ( '3d.plane2/2' @ V_P @ V_V ) ) ) ) ) )).

thf('3d.def_triangle_inside_of_plane_axiom',axiom,(
    ! [V_P: '3d.Shape',V_r: '3d.Point',V_q: '3d.Point',V_p: '3d.Point'] :
      ( ( '3d.triangle-type/1' @ ( '3d.triangle/3' @ V_p @ V_q @ V_r ) )
     => ( ( '3d.inside-of/2' @ ( '3d.triangle/3' @ V_p @ V_q @ V_r ) @ ( '3d.plane-shape/1' @ V_P ) )
      <=> ( '3d.inside-of/2' @ ( '3d.plane-figure/1' @ ( '3d.triangle/3' @ V_p @ V_q @ V_r ) ) @ ( '3d.plane-shape/1' @ V_P ) ) ) ) )).

thf('3d.def_square_inside_of_plane_axiom',axiom,(
    ! [V_P: '3d.Shape',V_s: '3d.Point',V_r: '3d.Point',V_q: '3d.Point',V_p: '3d.Point'] :
      ( ( '3d.square-type/1' @ ( '3d.square/4' @ V_p @ V_q @ V_r @ V_s ) )
     => ( ( '3d.inside-of/2' @ ( '3d.square/4' @ V_p @ V_q @ V_r @ V_s ) @ ( '3d.plane-shape/1' @ V_P ) )
      <=> ( '3d.inside-of/2' @ ( '3d.plane-figure/1' @ ( '3d.square/4' @ V_p @ V_q @ V_r @ V_s ) ) @ ( '3d.plane-shape/1' @ V_P ) ) ) ) )).

thf('3d.def_circle_inside_of_plane_axiom',axiom,(
    ! [V_P: '3d.Shape',V_n: '3d.Vector',V_r: $real,V_c: '3d.Point'] :
      ( ( '3d.circle-type/1' @ ( '3d.circle/3' @ V_c @ V_r @ V_n ) )
     => ( ( '3d.inside-of/2' @ ( '3d.circle/3' @ V_c @ V_r @ V_n ) @ ( '3d.plane-shape/1' @ V_P ) )
      <=> ( '3d.inside-of/2' @ ( '3d.plane-figure/1' @ ( '3d.circle/3' @ V_c @ V_r @ V_n ) ) @ ( '3d.plane-shape/1' @ V_P ) ) ) ) )).

thf('3d.def_disk_inside_of_plane_axiom',axiom,(
    ! [V_P: '3d.Shape',V_n: '3d.Vector',V_r: $real,V_c: '3d.Point'] :
      ( ( '3d.disk-type/1' @ ( '3d.disk/3' @ V_c @ V_r @ V_n ) )
     => ( ( '3d.inside-of/2' @ ( '3d.disk/3' @ V_c @ V_r @ V_n ) @ ( '3d.plane-shape/1' @ V_P ) )
      <=> ( '3d.inside-of/2' @ ( '3d.plane-figure/1' @ ( '3d.disk/3' @ V_c @ V_r @ V_n ) ) @ ( '3d.plane-shape/1' @ V_P ) ) ) ) )).

%-------------------------------------------------------------------------------
%----Distance
%-------------------------------------------------------------------------------
thf('3d.def_distance_square_3d_axiom',axiom,(
    ! [V_px: $real,V_py: $real,V_pz: $real,V_qx: $real,V_qy: $real,V_qz: $real] :
      ( ( '3d.distance^2/2' @ ( '3d.point/3' @ V_px @ V_py @ V_pz ) @ ( '3d.point/3' @ V_qx @ V_qy @ V_qz ) )
      = ( $sum @ ( '^/2' @ ( $difference @ V_px @ V_qx ) @ 2.0 ) @ ( $sum @ ( '^/2' @ ( $difference @ V_py @ V_qy ) @ 2.0 ) @ ( '^/2' @ ( $difference @ V_pz @ V_qz ) @ 2.0 ) ) ) ) )).

thf('3d.def_distance_3d_axiom',axiom,(
    ! [V_px: $real,V_py: $real,V_pz: $real,V_qx: $real,V_qy: $real,V_qz: $real] :
      ( ( '3d.distance/2' @ ( '3d.point/3' @ V_px @ V_py @ V_pz ) @ ( '3d.point/3' @ V_qx @ V_qy @ V_qz ) )
      = ( 'sqrt/1' @ ( $sum @ ( '^/2' @ ( $difference @ V_px @ V_qx ) @ 2.0 ) @ ( $sum @ ( '^/2' @ ( $difference @ V_py @ V_qy ) @ 2.0 ) @ ( '^/2' @ ( $difference @ V_pz @ V_qz ) @ 2.0 ) ) ) ) ) )).

thf('3d.def_point_shape_distance_line_axiom',axiom,(
    ! [V_B: '3d.Point',V_A: '3d.Point',V_P: '3d.Point'] :
      ( ( '3d.line-type/1' @ ( '3d.line/2' @ V_A @ V_B ) )
     => ( ( '3d.point-shape-distance/2' @ V_P @ ( '3d.line/2' @ V_A @ V_B ) )
        = ( $quotient @ ( '3d.radius/1' @ ( '3d.outer-prod/2' @ ( '3d.vec/2' @ V_A @ V_B ) @ ( '3d.vec/2' @ V_A @ V_P ) ) ) @ ( '3d.distance/2' @ V_A @ V_B ) ) ) ) )).

thf('3d.def_point_shape_distance_plane_axiom',axiom,(
    ! [V_v: $real,V_u: $real,V_t: $real,V_s: $real,V_z: $real,V_y: $real,V_x: $real] :
      ( ( '3d.plane-type/1' @ ( '3d.plane/4' @ V_s @ V_t @ V_u @ V_v ) )
     => ( ( '3d.point-shape-distance/2' @ ( '3d.point/3' @ V_x @ V_y @ V_z ) @ ( '3d.plane/4' @ V_s @ V_t @ V_u @ V_v ) )
        = ( $quotient @ ( 'abs/1' @ ( $sum @ ( $sum @ ( $sum @ ( $product @ V_s @ V_x ) @ ( $product @ V_t @ V_y ) ) @ ( $product @ V_u @ V_z ) ) @ V_v ) ) @ ( '3d.radius/1' @ ( '3d.vec3d/3' @ V_s @ V_t @ V_u ) ) ) ) ) )).

thf('3d.def_point_shape_distance_plane1_axiom',axiom,(
    ! [V_C: '3d.Point',V_B: '3d.Point',V_A: '3d.Point',V_P: '3d.Point'] :
      ( ( '3d.plane1-type/1' @ ( '3d.plane1/3' @ V_A @ V_B @ V_C ) )
     => ( ( '3d.point-shape-distance/2' @ V_P @ ( '3d.plane1/3' @ V_A @ V_B @ V_C ) )
        = ( '3d.radius/1' @ ( '3d.normal-vector-to/2' @ ( '3d.plane1/3' @ V_A @ V_B @ V_C ) @ V_P ) ) ) ) )).

thf('3d.def_point_shape_distance_plane2_axiom',axiom,(
    ! [V_n: '3d.Vector',V_A: '3d.Point',V_P: '3d.Point'] :
      ( ( '3d.plane2-type/1' @ ( '3d.plane2/2' @ V_A @ V_n ) )
     => ( ( '3d.point-shape-distance/2' @ V_P @ ( '3d.plane2/2' @ V_A @ V_n ) )
        = ( '3d.radius/1' @ ( '3d.normal-vector-to/2' @ ( '3d.plane2/2' @ V_A @ V_n ) @ V_P ) ) ) ) )).

thf('3d.def_point_shape_square_distance_line_3d_axiom',axiom,(
    ! [V_B: '3d.Point',V_A: '3d.Point',V_P: '3d.Point'] :
      ( ( '3d.line-type/1' @ ( '3d.line/2' @ V_A @ V_B ) )
     => ( ( '3d.point-shape-distance^2/2' @ V_P @ ( '3d.line/2' @ V_A @ V_B ) )
        = ( $quotient @ ( '3d.radius^2/1' @ ( '3d.outer-prod/2' @ ( '3d.vec/2' @ V_A @ V_B ) @ ( '3d.vec/2' @ V_A @ V_P ) ) ) @ ( '3d.distance^2/2' @ V_A @ V_B ) ) ) ) )).

thf('3d.def_point_shape_square_distance_plane_axiom',axiom,(
    ! [V_v: $real,V_u: $real,V_t: $real,V_s: $real,V_z: $real,V_y: $real,V_x: $real] :
      ( ( '3d.plane-type/1' @ ( '3d.plane/4' @ V_s @ V_t @ V_u @ V_v ) )
     => ( ( '3d.point-shape-distance^2/2' @ ( '3d.point/3' @ V_x @ V_y @ V_z ) @ ( '3d.plane/4' @ V_s @ V_t @ V_u @ V_v ) )
        = ( $quotient @ ( '^/2' @ ( $sum @ ( $sum @ ( $sum @ ( $product @ V_s @ V_x ) @ ( $product @ V_t @ V_y ) ) @ ( $product @ V_u @ V_z ) ) @ V_v ) @ 2.0 ) @ ( '3d.radius^2/1' @ ( '3d.vec3d/3' @ V_s @ V_t @ V_u ) ) ) ) ) )).

thf('3d.def_point_shape_square_distance_plane1_axiom',axiom,(
    ! [V_C: '3d.Point',V_B: '3d.Point',V_A: '3d.Point',V_P: '3d.Point'] :
      ( ( '3d.plane1-type/1' @ ( '3d.plane1/3' @ V_A @ V_B @ V_C ) )
     => ( ( '3d.point-shape-distance^2/2' @ V_P @ ( '3d.plane1/3' @ V_A @ V_B @ V_C ) )
        = ( '3d.radius^2/1' @ ( '3d.normal-vector-to/2' @ ( '3d.plane1/3' @ V_A @ V_B @ V_C ) @ V_P ) ) ) ) )).

thf('3d.def_point_shape_square_distance_plane2_axiom',axiom,(
    ! [V_n: '3d.Vector',V_A: '3d.Point',V_P: '3d.Point'] :
      ( ( '3d.plane2-type/1' @ ( '3d.plane2/2' @ V_A @ V_n ) )
     => ( ( '3d.point-shape-distance^2/2' @ V_P @ ( '3d.plane2/2' @ V_A @ V_n ) )
        = ( '3d.radius^2/1' @ ( '3d.normal-vector-to/2' @ ( '3d.plane2/2' @ V_A @ V_n ) @ V_P ) ) ) ) )).

thf('3d.def_distance_between_parallel_planes_axiom',axiom,(
    ! [V_P: '3d.Shape',V_Q: '3d.Shape'] :
      ( ( '3d.distance-between-parallel-planes/2' @ ( '3d.plane-shape/1' @ V_P ) @ ( '3d.plane-shape/1' @ V_Q ) )
      = ( '3d.radius/1' @ ( '3d.normal-vector-to/2' @ V_Q @ ( '3d.a-point-on/1' @ V_P ) ) ) ) )).

thf('3d.def_square_distance_between_parallel_planes_axiom',axiom,(
    ! [V_P: '3d.Shape',V_Q: '3d.Shape'] :
      ( ( '3d.distance^2-between-parallel-planes/2' @ ( '3d.plane-shape/1' @ V_P ) @ ( '3d.plane-shape/1' @ V_Q ) )
      = ( '3d.radius^2/1' @ ( '3d.normal-vector-to/2' @ V_Q @ ( '3d.a-point-on/1' @ V_P ) ) ) ) )).

thf('3d.def_distance_between_parallel_planes_plane_axiom',axiom,(
    ! [V_v: $real,V_u: $real,V_t: $real,V_s: $real,V_P: '3d.Shape'] :
      ( ( '3d.plane-type/1' @ ( '3d.plane/4' @ V_s @ V_t @ V_u @ V_v ) )
     => ( ( '3d.distance-between-parallel-planes/2' @ V_P @ ( '3d.plane/4' @ V_s @ V_t @ V_u @ V_v ) )
        = ( '3d.distance-between-parallel-planes/2' @ V_P @ ( '3d.plane-shape/1' @ ( '3d.plane/4' @ V_s @ V_t @ V_u @ V_v ) ) ) ) ) )).

thf('3d.def_distance_between_parallel_planes_plane1_axiom',axiom,(
    ! [V_r: '3d.Point',V_q: '3d.Point',V_p: '3d.Point',V_P: '3d.Shape'] :
      ( ( '3d.plane1-type/1' @ ( '3d.plane1/3' @ V_p @ V_q @ V_r ) )
     => ( ( '3d.distance-between-parallel-planes/2' @ V_P @ ( '3d.plane1/3' @ V_p @ V_q @ V_r ) )
        = ( '3d.distance-between-parallel-planes/2' @ V_P @ ( '3d.plane-shape/1' @ ( '3d.plane1/3' @ V_p @ V_q @ V_r ) ) ) ) ) )).

thf('3d.def_distance_between_parallel_planes_plane2_axiom',axiom,(
    ! [V_v: '3d.Vector',V_p: '3d.Point',V_P: '3d.Shape'] :
      ( ( '3d.plane2-type/1' @ ( '3d.plane2/2' @ V_p @ V_v ) )
     => ( ( '3d.distance-between-parallel-planes/2' @ V_P @ ( '3d.plane2/2' @ V_p @ V_v ) )
        = ( '3d.distance-between-parallel-planes/2' @ V_P @ ( '3d.plane-shape/1' @ ( '3d.plane2/2' @ V_p @ V_v ) ) ) ) ) )).

thf('3d.def_distance_between_parallel_planes_symmetry_axiom',axiom,(
    ! [V_P: '3d.Shape',V_Q: '3d.Shape'] :
      ( ( '3d.distance-between-parallel-planes/2' @ V_P @ ( '3d.plane-shape/1' @ V_Q ) )
      = ( '3d.distance-between-parallel-planes/2' @ ( '3d.plane-shape/1' @ V_Q ) @ V_P ) ) )).

thf('3d.def_square_distance_between_parallel_planes_plane_axiom',axiom,(
    ! [V_v: $real,V_u: $real,V_t: $real,V_s: $real,V_P: '3d.Shape'] :
      ( ( '3d.plane-type/1' @ ( '3d.plane/4' @ V_s @ V_t @ V_u @ V_v ) )
     => ( ( '3d.distance^2-between-parallel-planes/2' @ V_P @ ( '3d.plane/4' @ V_s @ V_t @ V_u @ V_v ) )
        = ( '3d.distance^2-between-parallel-planes/2' @ V_P @ ( '3d.plane-shape/1' @ ( '3d.plane/4' @ V_s @ V_t @ V_u @ V_v ) ) ) ) ) )).

thf('3d.def_square_distance_between_parallel_planes_plane1_axiom',axiom,(
    ! [V_r: '3d.Point',V_q: '3d.Point',V_p: '3d.Point',V_P: '3d.Shape'] :
      ( ( '3d.plane1-type/1' @ ( '3d.plane1/3' @ V_p @ V_q @ V_r ) )
     => ( ( '3d.distance^2-between-parallel-planes/2' @ V_P @ ( '3d.plane1/3' @ V_p @ V_q @ V_r ) )
        = ( '3d.distance^2-between-parallel-planes/2' @ V_P @ ( '3d.plane-shape/1' @ ( '3d.plane1/3' @ V_p @ V_q @ V_r ) ) ) ) ) )).

thf('3d.def_square_distance_between_parallel_planes_plane2_axiom',axiom,(
    ! [V_v: '3d.Vector',V_p: '3d.Point',V_P: '3d.Shape'] :
      ( ( '3d.plane2-type/1' @ ( '3d.plane2/2' @ V_p @ V_v ) )
     => ( ( '3d.distance^2-between-parallel-planes/2' @ V_P @ ( '3d.plane2/2' @ V_p @ V_v ) )
        = ( '3d.distance^2-between-parallel-planes/2' @ V_P @ ( '3d.plane-shape/1' @ ( '3d.plane2/2' @ V_p @ V_v ) ) ) ) ) )).

thf('3d.def_square_distance_between_parallel_planes_symmetry_axiom',axiom,(
    ! [V_P: '3d.Shape',V_Q: '3d.Shape'] :
      ( ( '3d.distance^2-between-parallel-planes/2' @ V_P @ ( '3d.plane-shape/1' @ V_Q ) )
      = ( '3d.distance^2-between-parallel-planes/2' @ ( '3d.plane-shape/1' @ V_Q ) @ V_P ) ) )).

thf('3d.def_line_line_distance_3d_axiom',axiom,(
    ! [V_q2: '3d.Point',V_q1: '3d.Point',V_p2: '3d.Point',V_p1: '3d.Point'] :
      ( ( ( '3d.line-type/1' @ ( '3d.line/2' @ V_p1 @ V_p2 ) )
        & ( '3d.line-type/1' @ ( '3d.line/2' @ V_q1 @ V_q2 ) ) )
     => ( ( '3d.line-line-distance/2' @ ( '3d.line/2' @ V_p1 @ V_p2 ) @ ( '3d.line/2' @ V_q1 @ V_q2 ) )
        = ( 'if/3' @ $real
          @ ^ [V__: 'Unit'] :
              ( '3d.parallel/2' @ ( '3d.line/2' @ V_p1 @ V_p2 ) @ ( '3d.line/2' @ V_q1 @ V_q2 ) )
          @ ( '3d.point-shape-distance/2' @ V_p1 @ ( '3d.line/2' @ V_q1 @ V_q2 ) )
          @ ( '3d.point-shape-distance/2' @ V_p1 @ ( '3d.plane1/3' @ V_q1 @ V_q2 @ ( '3d.vec-translate/2' @ V_q1 @ ( '3d.vec/2' @ V_p1 @ V_p2 ) ) ) ) ) ) ) )).

thf('3d.def_line_line_square_distance_3d_axiom',axiom,(
    ! [V_q2: '3d.Point',V_q1: '3d.Point',V_p2: '3d.Point',V_p1: '3d.Point'] :
      ( ( ( '3d.line-type/1' @ ( '3d.line/2' @ V_p1 @ V_p2 ) )
        & ( '3d.line-type/1' @ ( '3d.line/2' @ V_q1 @ V_q2 ) ) )
     => ( ( '3d.line-line-distance^2/2' @ ( '3d.line/2' @ V_p1 @ V_p2 ) @ ( '3d.line/2' @ V_q1 @ V_q2 ) )
        = ( 'if/3' @ $real
          @ ^ [V__: 'Unit'] :
              ( '3d.parallel/2' @ ( '3d.line/2' @ V_p1 @ V_p2 ) @ ( '3d.line/2' @ V_q1 @ V_q2 ) )
          @ ( '3d.point-shape-distance^2/2' @ V_p1 @ ( '3d.line/2' @ V_q1 @ V_q2 ) )
          @ ( '3d.point-shape-distance^2/2' @ V_p1 @ ( '3d.plane1/3' @ V_q1 @ V_q2 @ ( '3d.vec-translate/2' @ V_q1 @ ( '3d.vec/2' @ V_p1 @ V_p2 ) ) ) ) ) ) ) )).

thf('3d.def_line_plane_distance_axiom',axiom,(
    ! [V_plane: '3d.Shape',V_p2: '3d.Point',V_p1: '3d.Point'] :
      ( ( '3d.line-type/1' @ ( '3d.line/2' @ V_p1 @ V_p2 ) )
     => ( ( '3d.shape-shape-distance/2' @ ( '3d.line/2' @ V_p1 @ V_p2 ) @ ( '3d.plane-shape/1' @ V_plane ) )
        = ( 'if/3' @ $real
          @ ^ [V__: 'Unit'] :
              ( '3d.intersect/2' @ ( '3d.line/2' @ V_p1 @ V_p2 ) @ ( '3d.plane-shape/1' @ V_plane ) )
          @ 0.0
          @ ( '3d.point-shape-distance/2' @ V_p1 @ V_plane ) ) ) ) )).

thf('3d.def_line_plane_square_distance_axiom',axiom,(
    ! [V_plane: '3d.Shape',V_p2: '3d.Point',V_p1: '3d.Point'] :
      ( ( '3d.line-type/1' @ ( '3d.line/2' @ V_p1 @ V_p2 ) )
     => ( ( '3d.shape-shape-distance^2/2' @ ( '3d.line/2' @ V_p1 @ V_p2 ) @ ( '3d.plane-shape/1' @ V_plane ) )
        = ( 'if/3' @ $real
          @ ^ [V__: 'Unit'] :
              ( '3d.intersect/2' @ ( '3d.line/2' @ V_p1 @ V_p2 ) @ ( '3d.plane-shape/1' @ V_plane ) )
          @ 0.0
          @ ( '3d.point-shape-distance^2/2' @ V_p1 @ V_plane ) ) ) ) )).

thf('3d.def_plane_plane_distance_axiom',axiom,(
    ! [V_plane1: '3d.Shape',V_plane2: '3d.Shape'] :
      ( ( '3d.shape-shape-distance/2' @ ( '3d.plane-shape/1' @ V_plane1 ) @ ( '3d.plane-shape/1' @ V_plane2 ) )
      = ( 'if/3' @ $real
        @ ^ [V__: 'Unit'] :
            ( '3d.parallel/2' @ ( '3d.plane-shape/1' @ V_plane1 ) @ ( '3d.plane-shape/1' @ V_plane2 ) )
        @ ( '3d.distance-between-parallel-planes/2' @ ( '3d.plane-shape/1' @ V_plane1 ) @ ( '3d.plane-shape/1' @ V_plane2 ) )
        @ 0.0 ) ) )).

thf('3d.def_plane_plane_square_distance_axiom',axiom,(
    ! [V_plane1: '3d.Shape',V_plane2: '3d.Shape'] :
      ( ( '3d.shape-shape-distance^2/2' @ ( '3d.plane-shape/1' @ V_plane1 ) @ ( '3d.plane-shape/1' @ V_plane2 ) )
      = ( 'if/3' @ $real
        @ ^ [V__: 'Unit'] :
            ( '3d.parallel/2' @ ( '3d.plane-shape/1' @ V_plane1 ) @ ( '3d.plane-shape/1' @ V_plane2 ) )
        @ ( '3d.distance^2-between-parallel-planes/2' @ ( '3d.plane-shape/1' @ V_plane1 ) @ ( '3d.plane-shape/1' @ V_plane2 ) )
        @ 0.0 ) ) )).

thf('3d.def_shape_plane_distance_axiom',axiom,(
    ! [V_v: $real,V_u: $real,V_t: $real,V_s: $real,V_shape: '3d.Shape'] :
      ( ( '3d.plane-type/1' @ ( '3d.plane/4' @ V_s @ V_t @ V_u @ V_v ) )
     => ( ( '3d.shape-shape-distance/2' @ V_shape @ ( '3d.plane/4' @ V_s @ V_t @ V_u @ V_v ) )
        = ( '3d.shape-shape-distance/2' @ V_shape @ ( '3d.plane-shape/1' @ ( '3d.plane/4' @ V_s @ V_t @ V_u @ V_v ) ) ) ) ) )).

thf('3d.def_shape_plane1_distance_axiom',axiom,(
    ! [V_r: '3d.Point',V_q: '3d.Point',V_p: '3d.Point',V_shape: '3d.Shape'] :
      ( ( '3d.plane1-type/1' @ ( '3d.plane1/3' @ V_p @ V_q @ V_r ) )
     => ( ( '3d.shape-shape-distance/2' @ V_shape @ ( '3d.plane1/3' @ V_p @ V_q @ V_r ) )
        = ( '3d.shape-shape-distance/2' @ V_shape @ ( '3d.plane-shape/1' @ ( '3d.plane1/3' @ V_p @ V_q @ V_r ) ) ) ) ) )).

thf('3d.def_shape_plane2_distance_axiom',axiom,(
    ! [V_v: '3d.Vector',V_p: '3d.Point',V_shape: '3d.Shape'] :
      ( ( '3d.plane2-type/1' @ ( '3d.plane2/2' @ V_p @ V_v ) )
     => ( ( '3d.shape-shape-distance/2' @ V_shape @ ( '3d.plane2/2' @ V_p @ V_v ) )
        = ( '3d.shape-shape-distance/2' @ V_shape @ ( '3d.plane-shape/1' @ ( '3d.plane2/2' @ V_p @ V_v ) ) ) ) ) )).

thf('3d.def_plane_shape_distance_axiom',axiom,(
    ! [V_v: $real,V_u: $real,V_t: $real,V_s: $real,V_shape: '3d.Shape'] :
      ( ( '3d.plane-type/1' @ ( '3d.plane/4' @ V_s @ V_t @ V_u @ V_v ) )
     => ( ( '3d.shape-shape-distance/2' @ ( '3d.plane/4' @ V_s @ V_t @ V_u @ V_v ) @ V_shape )
        = ( '3d.shape-shape-distance/2' @ V_shape @ ( '3d.plane-shape/1' @ ( '3d.plane/4' @ V_s @ V_t @ V_u @ V_v ) ) ) ) ) )).

thf('3d.def_plane1_shape_distance_axiom',axiom,(
    ! [V_r: '3d.Point',V_q: '3d.Point',V_p: '3d.Point',V_shape: '3d.Shape'] :
      ( ( '3d.plane1-type/1' @ ( '3d.plane1/3' @ V_p @ V_q @ V_r ) )
     => ( ( '3d.shape-shape-distance/2' @ ( '3d.plane1/3' @ V_p @ V_q @ V_r ) @ V_shape )
        = ( '3d.shape-shape-distance/2' @ V_shape @ ( '3d.plane-shape/1' @ ( '3d.plane1/3' @ V_p @ V_q @ V_r ) ) ) ) ) )).

thf('3d.def_plane2_shape_distance_axiom',axiom,(
    ! [V_v: '3d.Vector',V_p: '3d.Point',V_shape: '3d.Shape'] :
      ( ( '3d.plane2-type/1' @ ( '3d.plane2/2' @ V_p @ V_v ) )
     => ( ( '3d.shape-shape-distance/2' @ ( '3d.plane2/2' @ V_p @ V_v ) @ V_shape )
        = ( '3d.shape-shape-distance/2' @ V_shape @ ( '3d.plane-shape/1' @ ( '3d.plane2/2' @ V_p @ V_v ) ) ) ) ) )).

thf('3d.def_shape_plane_square_distance_axiom',axiom,(
    ! [V_v: $real,V_u: $real,V_t: $real,V_s: $real,V_shape: '3d.Shape'] :
      ( ( '3d.plane-type/1' @ ( '3d.plane/4' @ V_s @ V_t @ V_u @ V_v ) )
     => ( ( '3d.shape-shape-distance^2/2' @ V_shape @ ( '3d.plane/4' @ V_s @ V_t @ V_u @ V_v ) )
        = ( '3d.shape-shape-distance^2/2' @ V_shape @ ( '3d.plane-shape/1' @ ( '3d.plane/4' @ V_s @ V_t @ V_u @ V_v ) ) ) ) ) )).

thf('3d.def_shape_plane1_square_distance_axiom',axiom,(
    ! [V_r: '3d.Point',V_q: '3d.Point',V_p: '3d.Point',V_shape: '3d.Shape'] :
      ( ( '3d.plane1-type/1' @ ( '3d.plane1/3' @ V_p @ V_q @ V_r ) )
     => ( ( '3d.shape-shape-distance^2/2' @ V_shape @ ( '3d.plane1/3' @ V_p @ V_q @ V_r ) )
        = ( '3d.shape-shape-distance^2/2' @ V_shape @ ( '3d.plane-shape/1' @ ( '3d.plane1/3' @ V_p @ V_q @ V_r ) ) ) ) ) )).

thf('3d.def_shape_plane2_square_distance_axiom',axiom,(
    ! [V_v: '3d.Vector',V_p: '3d.Point',V_shape: '3d.Shape'] :
      ( ( '3d.plane2-type/1' @ ( '3d.plane2/2' @ V_p @ V_v ) )
     => ( ( '3d.shape-shape-distance^2/2' @ V_shape @ ( '3d.plane2/2' @ V_p @ V_v ) )
        = ( '3d.shape-shape-distance^2/2' @ V_shape @ ( '3d.plane-shape/1' @ ( '3d.plane2/2' @ V_p @ V_v ) ) ) ) ) )).

thf('3d.def_plane_shape_square_distance_axiom',axiom,(
    ! [V_v: $real,V_u: $real,V_t: $real,V_s: $real,V_shape: '3d.Shape'] :
      ( ( '3d.plane-type/1' @ ( '3d.plane/4' @ V_s @ V_t @ V_u @ V_v ) )
     => ( ( '3d.shape-shape-distance^2/2' @ ( '3d.plane/4' @ V_s @ V_t @ V_u @ V_v ) @ V_shape )
        = ( '3d.shape-shape-distance^2/2' @ V_shape @ ( '3d.plane-shape/1' @ ( '3d.plane/4' @ V_s @ V_t @ V_u @ V_v ) ) ) ) ) )).

thf('3d.def_plane1_shape_square_distance_axiom',axiom,(
    ! [V_r: '3d.Point',V_q: '3d.Point',V_p: '3d.Point',V_shape: '3d.Shape'] :
      ( ( '3d.plane1-type/1' @ ( '3d.plane1/3' @ V_p @ V_q @ V_r ) )
     => ( ( '3d.shape-shape-distance^2/2' @ ( '3d.plane1/3' @ V_p @ V_q @ V_r ) @ V_shape )
        = ( '3d.shape-shape-distance^2/2' @ V_shape @ ( '3d.plane-shape/1' @ ( '3d.plane1/3' @ V_p @ V_q @ V_r ) ) ) ) ) )).

thf('3d.def_plane2_shape_square_distance_axiom',axiom,(
    ! [V_v: '3d.Vector',V_p: '3d.Point',V_shape: '3d.Shape'] :
      ( ( '3d.plane2-type/1' @ ( '3d.plane2/2' @ V_p @ V_v ) )
     => ( ( '3d.shape-shape-distance^2/2' @ ( '3d.plane2/2' @ V_p @ V_v ) @ V_shape )
        = ( '3d.shape-shape-distance^2/2' @ V_shape @ ( '3d.plane-shape/1' @ ( '3d.plane2/2' @ V_p @ V_v ) ) ) ) ) )).

%-------------------------------------------------------------------------------
%----Relations between geometric objects
%-------------------------------------------------------------------------------
thf('3d.def_tangent_line_and_sphere_axiom',axiom,(
    ! [V_P: '3d.Point',V_r: $real,V_c: '3d.Point',V_q: '3d.Point',V_p: '3d.Point'] :
      ( ( ( '3d.line-type/1' @ ( '3d.line/2' @ V_p @ V_q ) )
        & ( '3d.sphere-type/1' @ ( '3d.sphere/2' @ V_c @ V_r ) ) )
     => ( ( '3d.tangent/3' @ ( '3d.line/2' @ V_p @ V_q ) @ ( '3d.sphere/2' @ V_c @ V_r ) @ V_P )
      <=> ( ( '3d.on/2' @ V_P @ ( '3d.line/2' @ V_p @ V_q ) )
          & ( '3d.perpendicular/2' @ ( '3d.line/2' @ V_c @ V_P ) @ ( '3d.line/2' @ V_p @ V_q ) )
          & ( ( '3d.distance^2/2' @ V_P @ V_c )
            = ( '^/2' @ V_r @ 2.0 ) ) ) ) ) )).

thf('3d.def_tangent_sphere_and_line_axiom',axiom,(
    ! [V_P: '3d.Point',V_q: '3d.Point',V_p: '3d.Point',V_r: $real,V_c: '3d.Point'] :
      ( ( ( '3d.sphere-type/1' @ ( '3d.sphere/2' @ V_c @ V_r ) )
        & ( '3d.line-type/1' @ ( '3d.line/2' @ V_p @ V_q ) ) )
     => ( ( '3d.tangent/3' @ ( '3d.sphere/2' @ V_c @ V_r ) @ ( '3d.line/2' @ V_p @ V_q ) @ V_P )
      <=> ( '3d.tangent/3' @ ( '3d.line/2' @ V_p @ V_q ) @ ( '3d.sphere/2' @ V_c @ V_r ) @ V_P ) ) ) )).

thf('3d.def_tangent_seg_and_sphere_axiom',axiom,(
    ! [V_P: '3d.Point',V_q: '3d.Point',V_p: '3d.Point',V_r: $real,V_c: '3d.Point'] :
      ( ( ( '3d.segment-type/1' @ ( '3d.seg/2' @ V_p @ V_q ) )
        & ( '3d.sphere-type/1' @ ( '3d.sphere/2' @ V_c @ V_r ) ) )
     => ( ( '3d.tangent/3' @ ( '3d.seg/2' @ V_p @ V_q ) @ ( '3d.sphere/2' @ V_c @ V_r ) @ V_P )
      <=> ( ( '3d.tangent/3' @ ( '3d.line/2' @ V_p @ V_q ) @ ( '3d.sphere/2' @ V_c @ V_r ) @ V_P )
          & ( '3d.on/2' @ V_P @ ( '3d.seg/2' @ V_p @ V_q ) ) ) ) ) )).

thf('3d.def_tangent_sphere_and_seg_axiom',axiom,(
    ! [V_P: '3d.Point',V_q: '3d.Point',V_p: '3d.Point',V_r: $real,V_c: '3d.Point'] :
      ( ( ( '3d.sphere-type/1' @ ( '3d.sphere/2' @ V_c @ V_r ) )
        & ( '3d.segment-type/1' @ ( '3d.seg/2' @ V_p @ V_q ) ) )
     => ( ( '3d.tangent/3' @ ( '3d.sphere/2' @ V_c @ V_r ) @ ( '3d.seg/2' @ V_p @ V_q ) @ V_P )
      <=> ( '3d.tangent/3' @ ( '3d.seg/2' @ V_p @ V_q ) @ ( '3d.sphere/2' @ V_c @ V_r ) @ V_P ) ) ) )).

thf('3d.def_tangent_plane_and_sphere_axiom',axiom,(
    ! [V_P: '3d.Point',V_r: $real,V_c: '3d.Point',V_v: $real,V_u: $real,V_t: $real,V_s: $real] :
      ( ( ( '3d.plane-type/1' @ ( '3d.plane/4' @ V_s @ V_t @ V_u @ V_v ) )
        & ( '3d.sphere-type/1' @ ( '3d.sphere/2' @ V_c @ V_r ) ) )
     => ( ( '3d.tangent/3' @ ( '3d.plane/4' @ V_s @ V_t @ V_u @ V_v ) @ ( '3d.sphere/2' @ V_c @ V_r ) @ V_P )
      <=> ( ( '3d.on/2' @ V_P @ ( '3d.plane/4' @ V_s @ V_t @ V_u @ V_v ) )
          & ( ( '3d.distance^2/2' @ V_P @ V_c )
            = ( '^/2' @ V_r @ 2.0 ) )
          & ( '3d.perpendicular/2' @ ( '3d.line/2' @ V_c @ V_P ) @ ( '3d.plane/4' @ V_s @ V_t @ V_u @ V_v ) ) ) ) ) )).

thf('3d.def_tangent_sphere_and_plane_axiom',axiom,(
    ! [V_P: '3d.Point',V_v: $real,V_u: $real,V_t: $real,V_s: $real,V_r: $real,V_c: '3d.Point'] :
      ( ( ( '3d.sphere-type/1' @ ( '3d.sphere/2' @ V_c @ V_r ) )
        & ( '3d.plane-type/1' @ ( '3d.plane/4' @ V_s @ V_t @ V_u @ V_v ) ) )
     => ( ( '3d.tangent/3' @ ( '3d.sphere/2' @ V_c @ V_r ) @ ( '3d.plane/4' @ V_s @ V_t @ V_u @ V_v ) @ V_P )
      <=> ( '3d.tangent/3' @ ( '3d.plane/4' @ V_s @ V_t @ V_u @ V_v ) @ ( '3d.sphere/2' @ V_c @ V_r ) @ V_P ) ) ) )).

thf('3d.def_tangent_sphere_and_sphere_axiom',axiom,(
    ! [V_P: '3d.Point',V_R: $real,V_C: '3d.Point',V_r: $real,V_c: '3d.Point'] :
      ( ( ( '3d.sphere-type/1' @ ( '3d.sphere/2' @ V_c @ V_r ) )
        & ( '3d.sphere-type/1' @ ( '3d.sphere/2' @ V_C @ V_R ) ) )
     => ( ( '3d.tangent/3' @ ( '3d.sphere/2' @ V_c @ V_r ) @ ( '3d.sphere/2' @ V_C @ V_R ) @ V_P )
      <=> ( ( '3d.on/2' @ V_P @ ( '3d.sphere/2' @ V_c @ V_r ) )
          & ( '3d.on/2' @ V_P @ ( '3d.sphere/2' @ V_C @ V_R ) )
          & ( '3d.colinear/3' @ V_C @ V_c @ V_P ) ) ) ) )).

thf('3d.def_tangent_line_and_circle_axiom',axiom,(
    ! [V_P: '3d.Point',V_n: '3d.Vector',V_r: $real,V_c: '3d.Point',V_q: '3d.Point',V_p: '3d.Point'] :
      ( ( ( '3d.line-type/1' @ ( '3d.line/2' @ V_p @ V_q ) )
        & ( '3d.circle-type/1' @ ( '3d.circle/3' @ V_c @ V_r @ V_n ) ) )
     => ( ( '3d.tangent/3' @ ( '3d.line/2' @ V_p @ V_q ) @ ( '3d.circle/3' @ V_c @ V_r @ V_n ) @ V_P )
      <=> ( ( '3d.on/2' @ V_P @ ( '3d.line/2' @ V_p @ V_q ) )
          & ( '3d.on/2' @ V_P @ ( '3d.circle/3' @ V_c @ V_r @ V_n ) )
          & ( '3d.perpendicular/2' @ ( '3d.line/2' @ V_c @ V_P ) @ ( '3d.line/2' @ V_p @ V_q ) ) ) ) ) )).

thf('3d.def_tangent_circle_and_line_axiom',axiom,(
    ! [V_P: '3d.Point',V_n: '3d.Vector',V_r: $real,V_c: '3d.Point',V_q: '3d.Point',V_p: '3d.Point'] :
      ( ( ( '3d.circle-type/1' @ ( '3d.circle/3' @ V_c @ V_r @ V_n ) )
        & ( '3d.line-type/1' @ ( '3d.line/2' @ V_p @ V_q ) ) )
     => ( ( '3d.tangent/3' @ ( '3d.circle/3' @ V_c @ V_r @ V_n ) @ ( '3d.line/2' @ V_p @ V_q ) @ V_P )
      <=> ( '3d.tangent/3' @ ( '3d.line/2' @ V_p @ V_q ) @ ( '3d.circle/3' @ V_c @ V_r @ V_n ) @ V_P ) ) ) )).

thf('3d.def_perpendicular_line_vs_plane_shape_axiom',axiom,(
    ! [V_plane: '3d.Shape',V_q: '3d.Point',V_p: '3d.Point'] :
      ( ( '3d.line-type/1' @ ( '3d.line/2' @ V_p @ V_q ) )
     => ( ( '3d.perpendicular/2' @ ( '3d.line/2' @ V_p @ V_q ) @ ( '3d.plane-shape/1' @ V_plane ) )
      <=> ( '3d.vec-parallel/2' @ ( '3d.vec/2' @ V_p @ V_q ) @ ( '3d.normal-vector-of/1' @ V_plane ) ) ) ) )).

thf('3d.def_perpendicular_line_vs_plane1_axiom',axiom,(
    ! [V_R: '3d.Point',V_Q: '3d.Point',V_P: '3d.Point',V_q: '3d.Point',V_p: '3d.Point'] :
      ( ( ( '3d.line-type/1' @ ( '3d.line/2' @ V_p @ V_q ) )
        & ( '3d.plane1-type/1' @ ( '3d.plane1/3' @ V_P @ V_Q @ V_R ) ) )
     => ( ( '3d.perpendicular/2' @ ( '3d.line/2' @ V_p @ V_q ) @ ( '3d.plane1/3' @ V_P @ V_Q @ V_R ) )
      <=> ( ( '3d.vec-perpendicular/2' @ ( '3d.vec/2' @ V_p @ V_q ) @ ( '3d.vec/2' @ V_P @ V_Q ) )
          & ( '3d.vec-perpendicular/2' @ ( '3d.vec/2' @ V_p @ V_q ) @ ( '3d.vec/2' @ V_P @ V_R ) ) ) ) ) )).

thf('3d.def_perpendicular_plane_shape_vs_line_axiom',axiom,(
    ! [V_plane: '3d.Shape',V_q: '3d.Point',V_p: '3d.Point'] :
      ( ( '3d.line-type/1' @ ( '3d.line/2' @ V_p @ V_q ) )
     => ( ( '3d.perpendicular/2' @ ( '3d.plane-shape/1' @ V_plane ) @ ( '3d.line/2' @ V_p @ V_q ) )
      <=> ( '3d.perpendicular/2' @ ( '3d.line/2' @ V_p @ V_q ) @ ( '3d.plane-shape/1' @ V_plane ) ) ) ) )).

thf('3d.def_perpendicular_plane1_vs_line_axiom',axiom,(
    ! [V_R: '3d.Point',V_Q: '3d.Point',V_P: '3d.Point',V_q: '3d.Point',V_p: '3d.Point'] :
      ( ( ( '3d.plane1-type/1' @ ( '3d.plane1/3' @ V_P @ V_Q @ V_R ) )
        & ( '3d.line-type/1' @ ( '3d.line/2' @ V_p @ V_q ) ) )
     => ( ( '3d.perpendicular/2' @ ( '3d.plane1/3' @ V_P @ V_Q @ V_R ) @ ( '3d.line/2' @ V_p @ V_q ) )
      <=> ( '3d.perpendicular/2' @ ( '3d.line/2' @ V_p @ V_q ) @ ( '3d.plane1/3' @ V_P @ V_Q @ V_R ) ) ) ) )).

thf('3d.def_perpendicular_line_vs_plane_axiom',axiom,(
    ! [V_d: $real,V_c: $real,V_b: $real,V_a: $real,V_q: '3d.Point',V_p: '3d.Point'] :
      ( ( ( '3d.line-type/1' @ ( '3d.line/2' @ V_p @ V_q ) )
        & ( '3d.plane-type/1' @ ( '3d.plane/4' @ V_a @ V_b @ V_c @ V_d ) ) )
     => ( ( '3d.perpendicular/2' @ ( '3d.line/2' @ V_p @ V_q ) @ ( '3d.plane/4' @ V_a @ V_b @ V_c @ V_d ) )
      <=> ( '3d.perpendicular/2' @ ( '3d.line/2' @ V_p @ V_q ) @ ( '3d.plane-shape/1' @ ( '3d.plane/4' @ V_a @ V_b @ V_c @ V_d ) ) ) ) ) )).

thf('3d.def_perpendicular_line_vs_plane2_axiom',axiom,(
    ! [V_V: '3d.Vector',V_P: '3d.Point',V_q: '3d.Point',V_p: '3d.Point'] :
      ( ( ( '3d.line-type/1' @ ( '3d.line/2' @ V_p @ V_q ) )
        & ( '3d.plane2-type/1' @ ( '3d.plane2/2' @ V_P @ V_V ) ) )
     => ( ( '3d.perpendicular/2' @ ( '3d.line/2' @ V_p @ V_q ) @ ( '3d.plane2/2' @ V_P @ V_V ) )
      <=> ( '3d.perpendicular/2' @ ( '3d.line/2' @ V_p @ V_q ) @ ( '3d.plane-shape/1' @ ( '3d.plane2/2' @ V_P @ V_V ) ) ) ) ) )).

thf('3d.def_perpendicular_plane_vs_line_axiom',axiom,(
    ! [V_d: $real,V_c: $real,V_b: $real,V_a: $real,V_q: '3d.Point',V_p: '3d.Point'] :
      ( ( ( '3d.plane-type/1' @ ( '3d.plane/4' @ V_a @ V_b @ V_c @ V_d ) )
        & ( '3d.line-type/1' @ ( '3d.line/2' @ V_p @ V_q ) ) )
     => ( ( '3d.perpendicular/2' @ ( '3d.plane/4' @ V_a @ V_b @ V_c @ V_d ) @ ( '3d.line/2' @ V_p @ V_q ) )
      <=> ( '3d.perpendicular/2' @ ( '3d.line/2' @ V_p @ V_q ) @ ( '3d.plane-shape/1' @ ( '3d.plane/4' @ V_a @ V_b @ V_c @ V_d ) ) ) ) ) )).

thf('3d.def_perpendicular_plane2_vs_line_axiom',axiom,(
    ! [V_V: '3d.Vector',V_P: '3d.Point',V_q: '3d.Point',V_p: '3d.Point'] :
      ( ( ( '3d.plane2-type/1' @ ( '3d.plane2/2' @ V_P @ V_V ) )
        & ( '3d.line-type/1' @ ( '3d.line/2' @ V_p @ V_q ) ) )
     => ( ( '3d.perpendicular/2' @ ( '3d.plane2/2' @ V_P @ V_V ) @ ( '3d.line/2' @ V_p @ V_q ) )
      <=> ( '3d.perpendicular/2' @ ( '3d.line/2' @ V_p @ V_q ) @ ( '3d.plane-shape/1' @ ( '3d.plane2/2' @ V_P @ V_V ) ) ) ) ) )).

thf('3d.def_perpendicular_line3d_vs_plane_axiom',axiom,(
    ! [V_v: $real,V_u: $real,V_t: $real,V_s: $real,V_r: $real,V_q: $real,V_p: $real,V_c: $real,V_b: $real,V_a: $real] :
      ( ( ( '3d.line3d-type/1' @ ( '3d.line3d/6' @ V_a @ V_b @ V_c @ V_p @ V_q @ V_r ) )
        & ( '3d.plane-type/1' @ ( '3d.plane/4' @ V_s @ V_t @ V_u @ V_v ) ) )
     => ( ( '3d.perpendicular/2' @ ( '3d.line3d/6' @ V_a @ V_b @ V_c @ V_p @ V_q @ V_r ) @ ( '3d.plane/4' @ V_s @ V_t @ V_u @ V_v ) )
      <=> ( ( '3d.vec3d/3' @ 0.0 @ 0.0 @ 0.0 )
          = ( '3d.outer-prod/2' @ ( '3d.vec3d/3' @ V_a @ V_b @ V_c ) @ ( '3d.vec3d/3' @ V_s @ V_t @ V_u ) ) ) ) ) )).

thf('3d.def_perpendicular_plane_vs_line3d_axiom',axiom,(
    ! [V_v: $real,V_u: $real,V_t: $real,V_s: $real,V_r: $real,V_q: $real,V_p: $real,V_c: $real,V_b: $real,V_a: $real] :
      ( ( ( '3d.plane-type/1' @ ( '3d.plane/4' @ V_s @ V_t @ V_u @ V_v ) )
        & ( '3d.line3d-type/1' @ ( '3d.line3d/6' @ V_a @ V_b @ V_c @ V_p @ V_q @ V_r ) ) )
     => ( ( '3d.perpendicular/2' @ ( '3d.plane/4' @ V_s @ V_t @ V_u @ V_v ) @ ( '3d.line3d/6' @ V_a @ V_b @ V_c @ V_p @ V_q @ V_r ) )
      <=> ( '3d.perpendicular/2' @ ( '3d.line3d/6' @ V_a @ V_b @ V_c @ V_p @ V_q @ V_r ) @ ( '3d.plane/4' @ V_s @ V_t @ V_u @ V_v ) ) ) ) )).

thf('3d.def_intersect/2_line_plane_shape_axiom',axio